通过COM从单线程编程语言运行C#异步方法

时间:2017-10-10 13:49:09

标签: c# com async-await

我们有一个以单线程语言(DataFlex)运行的系统,并通过COM调用C#代码。一个这样的调用需要几秒钟才能完成,并且能够让C#方法在后台完成而不会阻止UI会很好。

我的第一次尝试没有在后台完成 - AsyncDbLoad似乎必须在将控制权返回给DataFlex之前完成其工作。

  private async Task DbLoad()
  {
     LongRunningMethod();
  }

  public async Task AsyncDbLoad()
  {
     await DbLoad();
  }

我做错了什么?甚至可以使用async-await来做到这一点吗?不,我该怎么办?

1 个答案:

答案 0 :(得分:3)

我不熟悉此版本的DataFlex,但我认为使用async await不会对您有所帮助。我会把它分成两个请求:

1:int StartDbLoad():启动操作,返回操作ID。

2:Result CheckResult(int operationId):检查结果是否可用并检索它。

在C#端,您可以使用Task在单独的线程中处理请求,并将结果保存在Dictionary<int, Result>中。 然后,您必须使用DataFlex中可用的任何功能来轮询结果,同时保持UI响应,例如Timer。