gpt4 book ai didi

c# - 任务并解锁用户界面

转载 作者:太空狗 更新时间:2023-10-29 23:39:22 27 4
gpt4 key购买 nike

我想使用线程解锁 ui。

你能告诉我这段代码有什么区别吗:

private async void button1_Click(object sender, EventArgs e)
{
int result = await Calculate(1, 2);

label1.Text = result.ToString();
}

private async Task<int> Calculate(int number1, int number2)
{
return await Task.Run(() =>
{
Thread.Sleep(5000);
return number1 + number2;
});
}

还有这段代码:

private async void button1_Click(object sender, EventArgs e)
{
int result = await Calculate(1, 2);

label1.Text = result.ToString();
}

private async Task<int> Calculate(int number1, int number2)
{
await Task.Delay(5000);
return number1 + number2;
}

最佳答案

主要区别在于 Task.Run 创建了一个新线程(请参阅 this MSDN documentation 的线程部分)。
因此,在第一种情况下,新线程创建 block 5 秒,然后返回结果(同时,主线程可供使用,因此 await 从 Task.Run(...) )

同样在第二种情况下,在等待之后,控制权转移到调用者并且 Task.Delay 在主线程中进行。没有创建新线程。

因此,正如您在问题中提到的,如果您想使用多线程,请使用 Task.Run() 以及 asyncawait 将为您提供多种可能性。

有关asyncawait 控制流的更多详细信息,请参阅上述文档。这是一本非常有用且详细的 MSDN 读物!

关于c# - 任务并解锁用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com