我正在創建一個通用加載程序,我想啓動一個HttpClient SendAsync
請求。但是,其中一些請求可能需要時間,所以我想添加取消選項,並在完成時通知。HttpClient異步任務管理
這看起來像是一個標準的情景imho。
我不確定這是否是正確的方式去解決這個問題,但基於我看過的一些例子,這裏是我所處的位置。如果你看看代碼的底部,我的問題是 - 在這一點上,我檢查響應並提出成功或錯誤事件?
public bool StartFetch()
{
if (IsFetching) return false;
IsFetching = true;
mCancellationTokenSource = new CancellationTokenSource();
// this is not awaited, so execution should continue
StartTask(request, mCancellationTokenSource.Token);
return true;
}
public bool CancelFetch()
{
// send cancellation
if (mCancellationTokenSource != null)
mCancellationTokenSource.Cancel();
Cleanup();
return true;
}
private async Task StartTask(LFHttpRequest request, CancellationToken cancellationToken)
{
var message = new HttpRequestMessage(request.Method, request.Uri);
var response = await HttpClient.SendAsync(message, cancellationToken);
// at this point, do I take a look at response and raise a custom OnSuccess or OnError event???
// or do I want to grab the task from `SendAsync`, check for completed or faulted?
}
爲什麼不直接使用'StartTask()''public''?我認爲這會解決你所有的問題。 – svick