将Action <>传递给异步方法

时间:2018-12-06 20:43:00

标签: c# asynchronous async-await delegates action

我了解到,异步方法不能使用 out ref 。但是我不清楚使用 Action (或委托)的后果。尽管我认识到“操作”中设置的值可能要等到等待之后才能使用,但以下内容还有其他问题吗?是他们的线程问题吗?我对此进行了广泛的搜索,但是在任何地方都找不到清晰的地方。

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
}

1 个答案:

答案 0 :(得分:2)

当您始终await执行任务时,从程序员的角度来看,代码的工作确实接近于同步代码。但是当您开始做这样的事情

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

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

无论如何,您的代码都可以。