【问题标题】:Run a Task, do something and then wait?运行任务,做某事然后等待?
【发布时间】:2015-03-18 23:25:38
【问题描述】:

我熟悉 Tasks、asyn/await 等的基础知识,但我没有做太多的高级工作,而且我有点卡在一个问题上。我有一种与相机系统进行通信的方法。摄像头代码使用 Task 在自己的线程上运行。

    public Task<bool> DoCameraWork()
    {
       bool Result = true;

       return Task.Run<bool>(() =>
         {
             for (int i = 0; i < 10; i++)
             {
                 // Do something which will set Result to True or False

                 if (Result)
                     break;
                 else
                     Task.Delay(1000);
             }

            return Result;
         });
    }

我想要做的是启动任务(DoCameraWork),更新 UI,调用另一个方法,然后等待任务完成后再继续。

实现这一目标的最佳方法是什么?这是一个模拟方法,我希望能解释更多。是的,代码很差,但它只是为了解释我想要实现的目标。

// Running on UI Thread
public async void SomeMethod()
{
   DoCameraWork();  // If I do await DoCameraWork() then rest of code won't process untill this has completed

   TextBox.Text = "Waiting For camera work";
   SendData(); // Calls a method to send data to device on RS232, notthing special in this method 

   // Now I want to wait for the DoCameraWork Task to finish

   // Once camera work done, check result, update UI and continue with other stuff       

   // if result is true
   // TextBox.Text = "Camera work finished OK";
   // else if result is false
   // TextBox.Text = "Camera work finished OK";
   // Camera work finished, now do some more stuff
}

【问题讨论】:

  • 你在开发什么平台?

标签: c# async-await task


【解决方案1】:

听起来你只是想稍后在方法中等待:

public async void SomeMethod()
{
   var cameraTask = DoCameraWork();

   TextBox.Text = "Waiting For camera work";
   SendData();

   var result = await cameraTask;
   TextBox.Text = result ? "Camera work finished OK"
                         : "Eek, something is broken";
   ...
}

【讨论】:

  • 是的,我有点想稍后再等,但我希望任务在此之前开始。所以任务必须在 'SendData()' 之前开始,但如果可以的话,我会在之后等待它。
  • @Gaz83 这就是这样做的。
  • @Servy 哦,所以 var cameraTask = DoCameraWork() 触发任务启动然后 var result = await cameraTask;检查任务的结果,如果它没有完成,那么它会在那里等待吗?
  • @JonSkeet 谢谢,正是我想要的。每天学习新东西:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2016-02-16
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多