c# - 运行任务,做某事然后等待?

标签 c# async-await task

我熟悉 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
}

最佳答案

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

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";
   ...
}

关于c# - 运行任务,做某事然后等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125968/

相关文章:

c# - C# 或 .NET 中最糟糕的陷阱是什么?

c# - 了解一行中使用的 Task.Run + Wait() + async + await 的使用

C# 在委托(delegate)调用中等待

node.js async/await 或 generic-pool 导致无限循环?

java - JBPM - 获取所有任务的列表

c# - 使用 TPL 任务杀死 .net 控制台应用程序

groovy - 我可以从 .gradle 文件中的 groovy 方法调用 gradle 任务吗?

c# - 在 ASP.Net 中从字节数组播放 AVI 文件

c# - 在类上调用静态方法时出现 TypeInitializationException 的原因可能是什么?

c# - RaisePropertyChanged - 将代码从 C# 转换为 VB.NET 时出错