TestAwaitTaskArrayAsync() は、コード内の複数の場所から呼び出すことができます。次の呼び出しで taskArray の実行が開始される前に、taskArray の実行をロックし、すべてのタスクが完了するまで非同期で待機する必要があります。コードは次のとおりです。
private async Task TestAwaitTaskArrayAsync()
{
Task[] taskArray;
lock (_lock_taskArray)
{
taskArray = new Task[]
{
Task.Run(() =>
{
SomeMethod1();
}),
Task.Run(() =>
{
SomeMethod2();
})
};
}
await Task.WhenAll(taskArray);
}
ロックでの待機は許可されていないため、必要に応じてAsyncLockを使用できますが、シンプルに保つようにしてください。このコードは正しく、スレッドセーフですか? await Task.WhenAll(taskArray); かどうかはわかりません。ロックの外側にある可能性がありますが、代わりに AsyncLock を使用する必要がありますか?