2016-04-01 5 views
0

ich einen Fall, wo ich habe einen Zusatz atomar zu implementieren und nur eine Aussage darüber speichern - i die unten tatAtomic Interlocked.Add unter async func als Parameter

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

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

Gibt es etwas falsch mit der über Interlocked.Add-Anweisung. Können wir eine await-Funktion übergeben, die einen int als Parameter an den add stmt zurückgibt? Was sind die Implikationen wenn überhaupt?

+0

Alle ** Hilfe ** ist _much_ _beachtet_ – Adi

Antwort

0

Dieser Code würde gut funktionieren, solange Sie verstehen, dass ComputeAsync vollständig abgeschlossen wird, bevor Add aufgerufen wird. Das heißt, die Reihenfolge der Ausführung ist wie folgt:

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