并行运行两个异步任务并在.NET 4.5中收集结果
我已经尝试了一段时间来获得我认为可以简单地使用.NET 4.5的东西
我想同时启动两个长时间运行的任务,并
以最佳的C#4.5(RTM)方式收集结果
以下作品,但我不喜欢它,因为:
我想Sleep
成为一个异步方法,所以它可以是await
其他方法
它看起来很笨拙 Task.Run()
我认为这甚至根本不使用任何新的语言功能!
工作代码:
public static void Go(){ Console.WriteLine("Starting"); var task1 = Task.Run(() => Sleep(5000)); var task2 = Task.Run(() => Sleep(3000)); int totalSlept = task1.Result + task2.Result; Console.WriteLine("Slept for a total of " + totalSlept + " ms");}private static int Sleep(int ms){ Console.WriteLine("Sleeping for " + ms); Thread.Sleep(ms); Console.WriteLine("Sleeping for " + ms + " FINISHED"); return ms;}
非工作代码:
更新:这实际上是有效的,并且是正确的方法,唯一的问题是 Thread.Sleep
此代码不起作用,因为调用Sleep(5000)
立即启动任务运行,因此Sleep(1000)
在完成之前不会运行。这是真的,即使Sleep
是async
,我不是太快使用await
或打电话.Result
。
我想也许有一种方法可以Task<T>
通过调用方法来获得非运行,async
这样我就可以调用Start()
这两个任务,但我无法弄清楚如何Task<T>
通过调用异步方法来获取。
public static void Go(){ Console.WriteLine("Starting"); var task1 = Sleep(5000); // blocks var task2 = Sleep(1000); int totalSlept = task1.Result + task2.Result; Console.WriteLine("Slept for " + totalSlept + " ms");}private static async Task<int> Sleep(int ms){ Console.WriteLine("Sleeping for " + ms); Thread.Sleep(ms); return ms;}
明月笑刀无情
手掌心
相关分类