.net 任务,结果导致潜在死锁

f0ofjuux  于 2023-02-10  发布在  .NET
关注(0)|答案(1)|浏览(109)

我有一段C# .Net代码需要调试,以检查它是否会导致线程相关的问题,我得到的建议是用await替换ContinueWith,我同意这一点。但是,我怀疑原始代码是否会导致问题,因为有人也说在ContinueWith中使用Task.Result是好的,因为结果在此时已经准备好了。因此,我正在寻找更多的想法,如果下面的代码可能会导致死锁或线程相关的问题。

private Task<HttpResponseMessage> ProcessRequest(HttpRequestMessage request, CancellationToken cancellationToken) {
   
    //sendAsync is another asyc method in current class
    
     return base.sendAsync(request, cancellationToken)
                          .ContinueWith(task => 
                                          {
                                           return task.Result;
                                           }, cancellationToken) ;
}
nfeuvbwi

nfeuvbwi1#

你应该总是使用await而不是ContinueWith。我有一篇关于why StartNew (and ContinueWith ) are problematic的很长的博客文章。dr版本的问题在于这些方法是非常低级的方法,它们有令人惊讶的行为,它们在async/await之前就存在了,并且没有被设计成与那些关键字很好地工作。

相关问题