【问题标题】:How to execute async tasks in a specific order如何按特定顺序执行异步任务
【发布时间】:2018-01-31 21:43:29
【问题描述】:

我有两项任务,其中一项我想在下一项开始之前完成。我已经尝试将它们变成一个任务并使用 task.Wait() 但它们仍然在错误的时间执行。使用短暂的睡眠有效,但我想避免睡觉。

private async void BuildNextData(object sender, RoutedEventArgs e)
{
    try
    {
        await this._LocalCluster.DataItem(this._LocalSceneIID.IID.Value, ".Data.DataPopupNext", null, null, null);

        System.Threading.Thread.Sleep(500);

        object o = await GetVentuxIndex(".Data.DataPopupCurrentIndex");
        Workspace.This.MainJsonBond.SelectedfilteredPopupWorries = Workspace.This.MainJsonBond.filteredPopupWorries[Int32.Parse(o.ToString())];
    }
    catch (Exception ex)
    {

    }
}

【问题讨论】:

  • 您是否有权使用这些方法来使它们同步?无论如何,这就是您要求做的事情。
  • 这正是你要做的,除了没有Sleep()await 表示“等待此操作完成后再继续”。如果这没有发生,那么您的 DataItem 方法有问题。也许你可以告诉我们这是在做什么。
  • 我无法控制 DataItem,它是我发送和接收数据的主机应用程序中的一种方法
  • 如果“发送和接收”在停止等待后仍未完全完成,那么您将不得不与负责该主机应用程序的人一起处理。你真的没有什么可以做的。这不是等待任务的工作方式。
  • @GabrielLuci 这足以写成答案,恕我直言:-)

标签: c# asynchronous


【解决方案1】:

除了没有Sleep() 之外,这正是您要做的方式。 await 表示“等待此操作完成后再继续”。

如果DataItem 方法正在执行的“发送和接收”在停止等待后没有完全完成,那么这是该方法中的代码的错误。您将不得不与负责该主机应用程序的任何人一起解决这个问题。你真的没有什么可以做的。这不是等待任务的工作方式。

【讨论】:

  • 好吧,await 不仅仅是“等待”。
  • 当然。但关键是,无论您正在等待的方法正在做什么,一旦您停止等待,就应该完全完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2017-08-30
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多