gpt4 book ai didi

c# - C# 中的 Async 和 Await 以及问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:08 27 4
gpt4 key购买 nike

这个程序没有以正确的顺序打印输出。

public static void Main(string[] args)
{
new Program().Start();
}

public async void Start()
{
int num1 = await GetNumber();
int num2 = await GetNumber();
int num3 = await GetNumber();
Console.WriteLine("Wait...");
Console.ReadKey();
}

public static async Task<int> GetNumber()
{
System.Threading.Thread.Sleep(4000);
Console.WriteLine("Hello");
return 0;
}

输出:

--------wait 4Seconds
--------print Hello
--------wait 4Seconds
--------print Hello
--------wait 4Seconds
--------print Hello
--------print wait....

它应该输出

--------print wait....
--------wait 4Seconds
--------print Hello
--------print Hello
--------print Hello

最佳答案

使用

Await Task.Delay(Timespan.FromMilliSeconds (4000))

代替 Thread.Sleep。

完整的示例。

using System;
using System.Threading.Tasks;

namespace Brad
{
public class Program
{
public static void Main(string[] args)
{
var task = new Program().Start();
Console.WriteLine("Wait...");
// You have to put a synchronous Wait() here because
// Main cannot be declared as async
task.Wait();
}

public async Task Start()
{
int num1 = await GetNumber();
int num2 = await GetNumber();
int num3 = await GetNumber();
Console.WriteLine("Finished");
}

public static async Task<int> GetNumber()
{
await Task.Delay(TimeSpan.FromMilliseconds(400));
Console.WriteLine("Hello");
return 0;
}
}
}

你可以看到它在这里运行

https://dotnetfiddle.net/KHJaDZ

或者您可能希望任务并行运行,而不是一个接一个地运行。你可以试试

using System;
using System.Threading.Tasks;

namespace Brad
{
public class Program
{
public static void Main(string[] args)
{
var task = new Program().Start();
Console.WriteLine("Wait...");
// You have to put a synchronous Wait() here because
// Main cannot be declared as async
task.Wait();
}

public async Task Start()
{
var task1 = GetNumber();
var task2 = GetNumber();
var task3 = GetNumber();
// This runs the tasks in parallel
await Task.WhenAll(task1, task2, task3);
Console.WriteLine("Finished");
}

public static async Task<int> GetNumber()
{
await Task.Delay(TimeSpan.FromMilliseconds(400));
Console.WriteLine("Hello");
return 0;
}
}
}

这是在这里运行的。

https://dotnetfiddle.net/kVk77Z

关于c# - C# 中的 Async 和 Await 以及问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405260/

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