lock の中で await は使用できない。
@see
非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]:.NET TIPS - @IT
async void function1 () { lock(lockobj) { Console.WriteLine ( "enter function" ); await function2 (); Console.WriteLine ( "function done" ); } } Task function2 () { return Task.Delay ( 2000 ); }関連するエラー。
CS1996 lock ステートメントの本体で待機することはできません。
CS4033 'await' 演算子は、非同期メソッド内でのみ使用できます。 このメソッドに 'async' 修飾子を指定し、 戻り値の型を 'Task' に変更することを検討してください。ロック方法。
var lockobj = new System.Threading.SemaphoreSlim(1, 1); await lockobj .WaitAsync(); lockobj.Release();
@see
非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]:.NET TIPS - @IT