加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在异步方法中启动期待已久的后台任务?

发布时间:2020-12-15 23:47:18 所属栏目:百科 来源:网络整理
导读:我正在努力解决如何在异步方法的世界中执行一些非常长时间运行的后台处理. 使用Stephen Cleary’s blog中的词汇表,我有兴趣在等待“承诺任务”之后启动“委托任务”.我希望尽快返回承诺的值,并让委托任务在后台继续. 要处理未等待的委托任务中的异常,我将使
我正在努力解决如何在异步方法的世界中执行一些非常长时间运行的后台处理.

使用Stephen Cleary’s blog中的词汇表,我有兴趣在等待“承诺任务”之后启动“委托任务”.我希望尽快返回承诺的值,并让委托任务在后台继续.

要处理未等待的委托任务中的异常,我将使用在the one described here.之后建模的异常处理延续

public async Task<int> ComplexProcessAsync()
{
  ...
  int firstResult = await FirstStepAsync();

  // THE COMPILER DOESN'T LIKE THIS
  Task.Run(() => VeryLongSecondStepIDontNeedToWaitFor(firstResult)).LogExceptions();

  return firstResult;
}

由于VeryLongSecondStep ……()可能需要很长时间,并且其结果纯粹是通过副作用(例如出现在数据库中的记录)可观察到的,因此我不想等待它.

但正如所指出的,编译器并不喜欢这样.它警告“因为没有等待这个调用,所以当前方法的执行在调用完成之前继续.考虑将’await’运算符应用于调用的结果.”

我可以忽略这个警告,但我觉得我不是以“正确”的方式做这件事.那么正确的方法是什么?

谢谢!

解决方法

I could ignore the warning,but I get the feeling I’m not doing this in “correct” way. So what is the correct way?

编译器警告您没有等待该任务.根据我的经验,> 99%的时间编译器是正确的,代码是错误的,因为它缺少await.因此,这是您知道自己正在做什么并希望危险地生活的罕见情况之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读