异步任务同步

本文关键字:同步 任务 异步 | 更新日期: 2023-09-27 18:24:26

我有三个异步任务需要按这样的顺序完成第一个,如果第一个完成了,就开始做第二个,当第二个完成时,就开始进行第三个。但我认为我的解决方案不是很好。你能提出更好的建议吗?

namespace WpfApplication215
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new AsyncWork();
    }
}
public class AsyncWork
{
    public List<int> Items { get; set; }
    public AsyncWork()
    {
        Action FirstPart = new Action(ComputeFirstpart);
        IAsyncResult result1 = FirstPart.BeginInvoke(null, null);
        if (!result1.AsyncWaitHandle.WaitOne(0, false))
        {
            Action SecondPart = new Action(ComputeSecondPart);
            IAsyncResult result2 = SecondPart.BeginInvoke(null, null);
            if (!result2.AsyncWaitHandle.WaitOne(0, false))
            {
                Action ThirdPart = new Action(ComputeThirdPart);
                IAsyncResult result3 = ThirdPart.BeginInvoke(null, null);
            }
        }
    }
    public void ComputeFirstpart()
    {
        Random rnd = new Random();
        System.Threading.Thread.Sleep(rnd.Next(1000,5000));
        Console.WriteLine("First Task Completed");
    }
    public void ComputeSecondPart()
    {
        Random rnd = new Random();
        System.Threading.Thread.Sleep(rnd.Next(1000, 5000));
        Console.WriteLine("Second Task Completed");
    }
    public void ComputeThirdPart()
    {
        Random rnd = new Random();
        System.Threading.Thread.Sleep(rnd.Next(1000, 5000));
        Console.WriteLine("Third Task Completed");
    }
}

异步任务同步

现有的代码不起作用,因为您可能只是不执行剩余的代码,或者并行执行方法,而这正是您想要防止的。

这是怎么回事?:

Task.Run(() => {
 F1();
 F2();
 F3();
});

如果你愿意,你可以让它异步。

此外,您可能没有意识到IAsyncResult在99%的情况下都是过时的。