我有一段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) ;
}
1条答案
按热度按时间nfeuvbwi1#
你应该总是使用
await
而不是ContinueWith
。我有一篇关于whyStartNew
(andContinueWith
) are problematic的很长的博客文章。dr版本的问题在于这些方法是非常低级的方法,它们有令人惊讶的行为,它们在async/await之前就存在了,并且没有被设计成与那些关键字很好地工作。