加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Async方法的秒表

发布时间:2020-12-15 03:51:39 所属栏目:百科 来源:网络整理
导读:我有一些代码如下: 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);} 因为My
我有一些代码如下:
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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读