2016-04-01 4 views
0

У меня есть случай, когда я должен осуществить добавление атомарной и просто сохранить заявление - я сделал нижеAtomic Interlocked.Add с асинхронной FUNC в качестве параметра

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

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

Что неправильно с выше оператора Interlocked.Add. Можем ли мы передать функцию ожидания, которая возвращает int как параметр в add stmt? Каковы последствия, если таковые имеются?

+0

Любая ** справка ** является _much_ _appreciated_ – Adi

ответ

0

Этот код будет работать нормально, если вы понимаете, что ComputeAsync будет полностью завершен до вызова Add. То есть порядок исполнения таков:

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