c# – 使用Async方法的秒表

前端之家收集整理的这篇文章主要介绍了c# – 使用Async方法的秒表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些代码如下:
public void Start()
{
    var watch = new Stopwatch();
    watch.Start();

    Task.Factory.StartNew(MyMethod1);
    Task.Factory.StartNew(MyMethod2);

    watch.Stop();
    Log(watch.ElapsedMilliseconds);
    Task.Factory.StartNew(MyMethod3);
}

因为MyMethod1和MyMethod2被称为异步watch.Stop()在错误的时间被调用.我如何确保.Stop在MyMethod1和MyMethod2完成后被调用并记录,但确保MyMethod3不必等待.

我想在Start()方法中保留所有的Stopwatch功能,并且没有我的任何3种方法中的记录,即MyMethod1,MyMethod2和MyMethod3

解决方法

您可以使用Task.Factory.ContinueWhenAll方法.
watch.Start();
var t1 = Task.Factory.StartNew(MyMethod1);
var t2 = Task.Factory.StartNew(MyMethod2);
Task.Factory.ContinueWhenAll(new [] {t1,t2},tasks => watch.Stop());

如果您是针对.NET 4.5及更高版本,您还可以使用Task.WhenAll方法.当所有传递的任务对象完成后,它返回一个完成的任务.

Task.WhenAll(t1,t2).ContinueWith(t => watch.Stop());

猜你在找的C#相关文章