c# - 调用多个相互依赖的异步方法

我正在寻找有关调用多个异步方法的最佳实践,其中每个下一个方法都依赖于前一个方法返回的值。

我正在尝试两种方法

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);

附言为了将来的引用,不要插入 StartNewTask.Run 作为异步代码的通用占位符;他们只是混淆了问题,因为他们有非常具体的用例。使用 await Task.Delay 代替;它是异步世界的 Thread.Sleep

https://stackoverflow.com/questions/54798456/

相关文章:

kubernetes - 定时任务 : unknown field "configMapRef"

python - 如何更改 django admin css 样式和字体?

haskell - OverloadedStrings 语言扩展如何工作?

office365 - 是否有 API 可以以编程方式制作 MS Office 365 Powerp

python-3.x - 如何从 faust 应用程序向 Websocket 发送数据

react-native - undefined 不是一个对象(评估'_reactNative.Te

r - 计算 R 中非零值之间出现零的次数

angular - 以 Angular 删除项目后无法刷新表

reactjs - 为什么我的 GlobalStyles 在使用样式化组件部署后不起作用?

sql-server - TRY_PARSE 但更快