我正在创建一个通用加载程序,我想启动一个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