gpt4 book ai didi

c# - 立即等待和稍后等待的区别

转载 作者:行者123 更新时间:2023-11-30 13:36:08 25 4
gpt4 key购买 nike

我找不到任何关于实际差异的信息。

所以我一直在做以下事情:

public async Task<int> DoSomethingAsync()
{
DoSomethingElse()
var result = await GetValueAsync();
var intValue = DoAnotherThing(result);
return intValue;
}

await 调用然后直接使用它,但我最近看到一些帖子,人们在做以下事情:

public async Task<int> DoSomethingAsync()
{
var task = GetValueAsync();
DoSomethingElse()
var result = await task;
var intValue = DoAnotherThing(result);
return intValue;
}

那么这是否意味着方法 GetValueAsync 正在开始执行,然后我们稍后等待它的结果?或者这是否意味着它正在同步执行但它仍然可以await

最佳答案

Damien_The_Unbeliever 说得对,这取决于实现。

class Program
{
public static int DoAnotherThing(string value)
{
return int.Parse(value);
}

public static async Task<string> GetValueAsync()
{
await Task.Delay(5000);
return "12";
}

public static void DoSomethingElse()
{
Thread.Sleep(5000);
}

public static async Task<int> DoSomethingAsyncA()
{
DoSomethingElse();
var result = await GetValueAsync();
var intValue = DoAnotherThing(result);
return intValue;
}

public static async Task<int> DoSomethingAsyncB()
{
var task = GetValueAsync();
DoSomethingElse();
var result = await task;
var intValue = DoAnotherThing(result);
return intValue;
}

public static void Measure(Action act)
{
var sw = new Stopwatch();

sw.Start();

act();

sw.Stop();

Console.WriteLine(sw.Elapsed);
}

static void Main(string[] args)
{
Measure(() => DoSomethingAsyncA().Wait());
Measure(() => DoSomethingAsyncB().Wait());

Console.ReadLine();
}
}

在这种情况下,DoSomethingAsyncB 将花费大约 5 秒,而 DoSomethingAsyncA 将花费大约 10 秒。但是,如果您的 GetValueAsync 返回的值计算是从其他地方开始的,则不会有任何区别。

更新我更正了答案中的错误。这是我机器的输出:

  00:00:10:0161446
00:00:05:0032000

关于c# - 立即等待和稍后等待的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38480895/

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