首页 > 解决方案 > C#如何同时异步运行我的两个函数

问题描述

下面是我编写的示例程序。我正在学习异步/等待的用法。当我执行代码时,我看到第一次GetAllTheCats执行,完成后GetAllTheFood执行。所以这不是平行的。告诉我如何同时异步运行两个例程,这将更新两个不同的标签控件。如果可能,请重组我的代码。

private async void button1_Click(object sender, EventArgs e)
        {
            await Task.Run(() => GetAllTheCats());
            await Task.Run(() => GetAllTheFood());
        }

        public string GetAllTheCats()
        {
            // Do stuff, like hit the Db, spin around, dance, jump, etc...
            // It all takes some time.
            Thread.Sleep(2000);
            return "";
        }

        public string GetAllTheFood()
        {
            // Do more stuff, like hit the Db, nom nom noms...
            // It all takes some time.
            Thread.Sleep(2000);

            return "";
        }

标签: c#

解决方案


你可以这样使用:

var task1 = Task.Run(() => GetAllTheCats());
var task2 = Task.Run(() => GetAllTheFood());

await Task.WhenAll(task1, task2);

然后

Console.WriteLine(task1.Result);

或者

var result = await Task.WhenAll(task1, task2);
Console.WriteLine(result[0]);

推荐阅读