我了解到,异步方法不能使用 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
}
答案 0 :(得分:2)
当您始终await
执行任务时,从程序员的角度来看,代码的工作确实接近于同步代码。但是当您开始做这样的事情
var task1 = FooAsync(setOutput);
var task2 = BarAsync(setOutput);
var result1 = await task1;
var result2 = await task2;
事情开始变得有趣,因为不能保证它们完成的顺序或使用的线程。
无论如何,您的代码都可以。