为何要取消原来的任务,同时继续使用其他内容?自从我投入C#编程以来已经4周了。这真的很有趣,但是,一个麻烦:当我单独使用HttpClient.PostAsync()启动任务时,它工作正常。但如果我继续做其他事情,原始任务就会被取消,而不是我。看来任务不乐意继续了。任务task0;任务task1;使用(varclient=newHttpClient()){HttpContent内容=newByteArrayContent(newbyte[]{});task0=client.PostAsync("",内容);task1=task0.ContinueWith((t)=>{//什么都不做});}task1.Wait();//我这里得到了task0.IsCanceled==true我试过:1、在task0.wait()后面马上加上task0.wait()会解决问题,但这不是我想要的。因为我需要异步的性能优势,并且这样做可以使其完全同步。2.在task0.wait()之前添加task0.wait()task1.wait()会导致TaskCanceledExcpetion。3、删除task0,等待task0。4.调用task0.start()将得到“Startmaynotbecalledonapromise-styletask”。所以,有人告诉我,我做错了什么?PS:在我问这个问题之前,我已经用谷歌搜索了好几天。StackOverflow上的一些问题看起来可能是相关的,但事实证明它们与我的不一样。谁取消了我的任务?她/他在问为什么没有执行延续任务。为什么会出现TaskCanceledException?她/他正在弄乱我从未做过的CancellationToken,并得到了意想不到的结果。我也读到了有关此任务取消的信息,但仍然一无所知。您的HttpClient很可能在PostAsync完成之前被丢弃。出于测试目的删除using语句,一切都会按预期工作。请求完成后,您应该将客户端部署在不同的位置。此外,如果您的应用程序逻辑允许,许多人会建议尽可能重用HttpClient的单个实例。因此,这段代码似乎在您连接到延续时立即处理HttpClient,这很可能不是您想要的。如果要使用using语句来处理客户端实例,则需要使用async和await关键字。以下代码等同于您的示例,编译器为您提供了延续。公共异步任务FooAsync(){使用(varclient=newHttpClient()){HttpContent内容=newByteArrayContent(newbyte[]{});等待client.PostAsync("",内容);//在这里继续你的代码。}}如果想继续使用不借助编译器创建的continuation,可以将处理逻辑放在continuation中:以上是C#学习教程:继续使用其他内容时为什么要取消原来的任务?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——Tasktask0;任务task1;varclient=newHttpClient();HttpContent内容=newByteArrayContent(newbyte[]{});task0=client.PostAsync("",内容);task1=task0.ContinueWith((t)=>{client.Dispose();})task1.Wait();本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
