【发布时间】:2015-10-17 18:04:20
【问题描述】:
我想尝试 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)好的 10
但有时 我得到了 3) 什么都没有
如何在不使用 task.Result 的情况下通过 await 从异步方法获得准确的结果,否则它不会发生?
【问题讨论】:
-
从多个线程写入控制台是否安全?我现在不记得了。
-
你也可以使用
task.GetAwaiter().GetResult(),它与task.Result的不同之处在于它不会用AggregateException包装异常。
标签: c# async-await