优化代码 Task<int> task1 = Task.Run(() => 1); Task<string> task2 = Task.Run(() => "hello"); await Task.WhenAll(task1, task2); var task1Result = task1.Result; var task2Result = task2.Result;
时间: 2024-04-22 21:23:05 浏览: 81
.NET中的async和await关键字使用及Task异步调用实例
这个修改在语义上与原始代码是相同的,但是去掉了await关键字,这意味着代码不会暂停等待任务完成,而是直接获取它们的结果。这种方式可以避免在await时出现的上下文切换开销,因为不需要等待异步操作完成。
但是,这种方式也有一些潜在的问题。如果任务没有完成,那么调用Result属性将会导致线程阻塞,直到任务完成。这可能会导致死锁或其他问题。因此,建议在使用Result属性之前,先检查任务是否已经完成,例如使用Task.IsCompleted属性。
所以,根据具体情况,使用await和Result都是可以的,但是需要注意它们之间的差异和注意事项。
阅读全文