自从我投入 C# 编程以来已经 4 周了。确实很有趣,但是,我感到很痛苦:
当我开始任务时HttpClient.PostAsync()
单独使用,效果很好。但如果我继续做其他事情,原来的任务将被取消,而不是由我取消。看起来该任务对继续进行并不满意。
Task<HttpResponseMessage> task0;
Task task1;
using (var client = new HttpClient())
{
HttpContent content = new ByteArrayContent(new byte[]{});
task0 = client.PostAsync("<valid http address>", content);
task1 = task0.ContinueWith((t) =>
{
// Do nothing
});
}
task1.Wait();
// I got task0.IsCanceled == true here
I tried:
1, Add task0.wait()
之后立马PostAsync()
会解决问题,但这不是我想要的。因为我需要从异步中获得性能优势,而这样做将使其完全同步。
2, Add task0.wait()
before task1.wait()
会造成一个TaskCanceledExcpetion
.
3、删除task1
并等待task0
会好的。
4, Call task0.start()
将得到“不能在承诺式任务上调用 Start”。
那么,请有人告诉我我做错了什么?
PS:
在我问这个问题之前,我已经用谷歌搜索了好几天了。 StackOverflow 上的一些问题可能看起来很相关,但事实证明它们与我的不一样。
谁取消了我的任务?她/他问为什么延续任务没有执行。
为什么会出现TaskCanceledException?她/他搞乱了我从未做过的 CancellationToken 并得到了意想不到的结果。
我也读过这个任务取消但仍然没有任何线索。