我只是测试一些异步并等待简单的函数。现在Console.WriteLine(foo())
的输出为System.Threading.Tasks.Task1[System.Int32]
。我想知道如何让它返回1
?
static async Task<int> Delay1() { await Task.Delay(1000); return 1; }
static async Task<int> Delay2() { await Task.Delay(2000); return 2; }
static async Task<int> Delay3() { await Task.Delay(3000); return 3; }
static async Task<int> foo()
{
Task<int> winningTask = await Task.WhenAny(Delay1(), Delay2(), Delay3());
//int r = winningTask.Result;
//return r;
await winningTask;
return winningTask.Result;
}
static void Main(string[] args)
{
Console.WriteLine("Done");
Console.WriteLine(foo()); // 1
Console.WriteLine(Delay1().Result);
}
答案 0 :(得分:4)
您似乎对async-await
的使用存在一些误解。 await
不仅 a 同步等待以完成任务,它还会提取任务的结果并抛出第一个异常(如果有)
static async Task<int> foo()
{
Task<int> winningTask = await Task.WhenAny(Delay1(), Delay2(), Delay3());
return await winningTask;
}
只要您的方法可以是async
,您就应该使用await
:
static async Task Test()
{
Console.WriteLine("Done");
Console.WriteLine(await foo());
Console.WriteLine(await Delay1());
}
static void Main()
{
Test().Wait();
}