我正在寻找有关调用多个异步方法的最佳实践,其中每个下一个方法都依赖于前一个方法返回的值。
我正在尝试两种方法
1) https://dotnetfiddle.net/waPL9L
public async void Main()
{
var T1 = await Sum(2,5);
var T2 = await Sum(T1, 7);
var T3 = await Sum(T2, 7);
Console.WriteLine(T3);
}
public async Task<int> Sum(int num1, int num2){
return await Task.Run(() => {
// for some reason if i use Sleep... I don't see any results at all...
//Thread.Sleep(2000);
return num1 + num2;
});
}
2) https://dotnetfiddle.net/1xycWH
public async void Main()
{
var T1 = Sum(2,5);
var T2 = Sum(T1.Result, 7);
var T3 = Sum(T2.Result, 7);
//var myVar = T3.Result;
var listOfTasks = new List<Task>{T1,T2,T3};
await Task.WhenAll(listOfTasks);
Console.Write(T3.Result);
}
public async Task<int> Sum(int num1, int num2){
return await Task.Run(() => {
Thread.Sleep(1000);
return num1 + num2;
});
}
只是想了解最佳方法,因为我是异步编程的新手。
提前致谢!
强尼
最佳答案
I'm looking for best practice around calling multiple async methods where each next method relies on the values returned from one before.
许多异步问题可以通过查看同步等价物来回答。如果所有方法都是同步的,并且每个方法都依赖于先前方法的结果,那看起来会怎样?
var T1 = Sum(2,5);
var T2 = Sum(T1, 7);
var T3 = Sum(T2, 7);
那么异步等效项将是:
var T1 = await SumAsync(2,5);
var T2 = await SumAsync(T1, 7);
var T3 = await SumAsync(T2, 7);
附言为了将来的引用,不要插入 StartNew
或 Task.Run
作为异步代码的通用占位符;他们只是混淆了问题,因为他们有非常具体的用例。使用 await Task.Delay
代替;它是异步世界的 Thread.Sleep
。
关于c# - 调用多个相互依赖的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798456/