【发布时间】:2021-12-31 07:35:32
【问题描述】:
从下面的示例中,我无法理解为什么 async 和 await 在第一个示例中不起作用但在第二个示例中起作用。
第一个例子:
public static async Task Main(string[] args)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Console.WriteLine("started");
var i = await GetIntAsync(10);
var j = await GetstringAsync("abc");
Console.WriteLine($"int {i}, string {j}");
stopWatch.Stop();
Console.WriteLine("RunTime " + stopWatch.ElapsedMilliseconds);
}
第二个例子:
public static async Task Main(string[] args)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Console.WriteLine("started");
var i = GetIntAsync(10);
var j = GetstringAsync("abc");
await i; await j;
Console.WriteLine($"int {i.Result}, string {j.Result}");
stopWatch.Stop();
Console.WriteLine("RunTime " + stopWatch.ElapsedMilliseconds);
}
GetIntAsync方法:
public static async Task<int> GetIntAsync(int i)
{
Console.WriteLine("in get int waiting 3 sec's");
await Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("int wait complete");
});
return i;
}
GetstringAsync方法:
public static async Task<string> GetstringAsync(string i)
{
Console.WriteLine("in get int waiting 6 sec's");
await Task.Run(() =>
{
Thread.Sleep(6000);
Console.WriteLine("string wait complete");
});
return i;
}
【问题讨论】:
-
“为什么 async 和 await 在第一个示例中不起作用” - 您能否提供更多详细信息?什么不起作用(您期望什么以及实际结果是什么)?看看你的例子,两个版本似乎都不错。
-
@RomanDoskoch 措辞不佳的问题,但 Thread.Sleeps 似乎表明 OP 想要并发,而不是异步。
-
我期待 GetIntAsync 和 GetStringAsync 在两个示例中并行运行@RomanDoskoch
-
仅供参考,而不是
Thread.Sleep里面的Task.Run你可以做await Task.Delay(6000);
标签: c# .net async-await task