Atomic Interlocked.Add将async func作为参数

时间:2016-04-01 18:53:20

标签: asynchronous interlocked

我有一个案例,我必须原子地实现一个加法,只是为了保存一个声明 - 我做了以下

int result = Interlocked.Add(ref int source, await ComputeAsync(object someObj);

public async Task<int> ComputeAsync(object someObj)
{
  // some operations
  ....
}

上面的Interlocked.Add语句是否有错误。我们可以传递一个await函数,它将一个int作为param返回给add stmt吗?有什么影响?

1 个答案:

答案 0 :(得分:0)

只要您了解ComputeAsync将在Add被调用之前完全完成,那么该代码就可以正常运行。也就是说,执行顺序如下:

int value = await ComputeAsync(someObj);
int result = Interlocked.Add(ref int source, value);