我想尝试使用async和await进行实验,但是结果很糟糕。 我有一个需要异步运行两个方法的方法(它部分工作)。
public void Run()
{
Task[] tasks = new Task[2];
tasks[0] = Task.Factory.StartNew(DisplayInt);
tasks[1] = Task.Factory.StartNew(DisplayString);
//block thread until tasks end
Task.WaitAll(tasks);
}
有两种常用的方法
public async void DisplayInt()
{
Task<int> task = new Task<int>(
() => 10);
task.Start();
Console.WriteLine(await task);
}
public async void DisplayString()
{
Task<string> task = new Task<string>(
() => "ok" );
task.Start();
Console.WriteLine(await task);
}
通常我得到以下结果:
1)10 ok
或者
2)ok 10
但有时候,我会得到:
3)什么都没有
如何在不使用task.Result的情况下,通过await从异步方法中获取确切的结果?
task.GetAwaiter().GetResult()
,它与task.Result
不同之处在于它不会用AggregateException
包装异常。 - noseratio - open to work