У меня есть три задачи async, которые необходимо выполнить в такой последовательности. Сначала, если сначала будет завершено, начните делать Second, а когда Second будет завершено, начните делать третье. Но я думаю, что мое решение не очень хорошо. Можете ли вы предложить что-то лучше?Синхронизация задачи Async
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");
}
}
Это очень странно, но этот код работает. – A191919
@ A191919 * * * * работа, но я удивлен, что он вообще делает. Сроки должны привести к ошибке 99,9999% случаев, потому что WaitOne (0) должен почти всегда терпеть неудачу. Обновление: WaitOne вернет в основном false, поэтому проверки пройдут, и вы выполняете параллельные методы. Так что в 99,999% случаев у вас есть ошибка. – usr
Полностью согласен с «IAsyncResult» - он полностью устарел. – Gusdor