【问题标题】:Passing Action<> into Async Method将 Action<> 传递给异步方法
【发布时间】:2018-12-06 20:42:59
【问题描述】:

我了解在异步方法中不能使用 outref。但我不清楚使用 Action(或委托)的后果。虽然我认识到 Action 中设置的值可能要等到 await 之后才可用,但下面还有其他问题吗?他们的线程问题吗?我对此进行了广泛的谷歌搜索,但在任何地方都找不到明确的答案。

protected async Task<gPeriod> MapPeriod(string value, Action<int> setOutput)
{
    (...) //omitted code
    int x = await MyMethodAsync(value)
    setOutput(x);
    return gPeriod;  //calculation of this not shown in this example
}

【问题讨论】:

  • 问题中的代码本身没有任何错误或危险。
  • 你的代码没问题。

标签: c# asynchronous async-await delegates action


【解决方案1】:

当您总是await 一个任务时,从程序员的角度来看,代码的工作方式与同步代码非常接近。但是当你开始做这样的事情时

var task1 = FooAsync(setOutput);
var task2 = BarAsync(setOutput);
var result1 = await task1;
var result2 = await task2;

事情开始变得有趣,因为他们完成的顺序或他们使用的线程无法保证。

反正你的代码没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多