C# 如何隐式转换任务<;A>;使用async和Wait创建一个?
我只是测试一些异步,并用简单的函数等待。现在,C# 如何隐式转换任务<;A>;使用async和Wait创建一个?,c#,.net,task-parallel-library,async-await,C#,.net,Task Parallel Library,Async Await,我只是测试一些异步,并用简单的函数等待。现在,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); retu
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);
}
static async Task Delay1(){wait Task.Delay(1000);返回1;}
静态异步任务Delay2(){await Task.Delay(2000);返回2;}
静态异步任务Delay3(){await Task.Delay(3000);返回3;}
静态异步任务foo()
{
Task winningTask=等待Task.WhenAny(Delay1(),Delay2(),Delay3());
//int r=winningTask.Result;
//返回r;
等待温宁任务;
返回winningTask.Result;
}
静态void Main(字符串[]参数)
{
控制台。写入线(“完成”);
Console.WriteLine(foo());//1
Console.WriteLine(Delay1().Result);
}
您似乎对async wait
的用法有一些误解wait
不仅异步等待任务完成,它还提取任务的结果,并在有异常时抛出其第一个异常
static async Task<int> foo()
{
Task<int> winningTask = await Task.WhenAny(Delay1(), Delay2(), Delay3());
return await winningTask;
}
Console.WriteLine(foo().Result)有什么问题代码>?(将在WinForm中死锁,但您有控制台应用程序,所以没问题)。也可以查看博客文章,了解从控制台运行
async
方法的方法。斯蒂芬·克利里(Stephen Cleary)可能重复了这一点-返回等待winningTask有什么问题代码>?您只需要获得由foo()
返回的任务结果,请参阅@I3arnon的答案。
static async Task Test()
{
Console.WriteLine("Done");
Console.WriteLine(await foo());
Console.WriteLine(await Delay1());
}
static void Main()
{
Test().Wait();
}