gpt4 book ai didi

c# - 将秒表与异步方法一起使用

转载 作者:可可西里 更新时间:2023-11-01 08:40:40 24 4
gpt4 key购买 nike

我有一些代码如下:

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() 在错误的时间被调用。我如何确保在 MyMethod1 和 MyMethod2 完成后调用并记录 .Stop 但确保 MyMethod3 不必等待。

我想在我的 Start() 方法中保留所有秒表功能,并且不在我的 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 对象完成时完成。

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

关于c# - 将秒表与异步方法一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com