私はこのような機能をコントローラに注入されるシングルトンサービスに持っています。私が心配何非同期関数は、別のインスタンスが実行されているのと同時に実行できますか?
public async Task<ResponseModel> Put(BoardModel request)
{
var board = await dbService.GetBoardAsync(request.UserId, request.TargetId, request.Ticker);
// Update the model
// ...
var response = await dbService.SetBoardAsync(request.UserId, request.TargetId, request.Ticker, request);
return new ResponseModel
{
ResponseStatus = response.Successful(replacements: 1) ? ResponseStatus.Success : ResponseStatus.Failure
};
}
は、競合状態である機能の2つのインスタンスが同時に実行されている、もう1つは、DB内のエントリを上書きする場合は、言います。
これは可能ですか?それが起こる可能性は非常に低いですが、私はまだ少し心配しています。
ありがとうございます!
次に、データベースで適切なロックレベルまたは同時実行性オプションを使用します。このコードでは、非同期または非同期に2回実行することはできません。 –
@DavidLこれはWebアプリケーションです。 *非同期でマークされていない場合でも、複数のHTTP PUTリクエストが複数の呼び出しを引き起こします。あなたが誤解している@PanagiotisKanavosをロックする理由はありません。 –
コードロック、データベースロックではありません。営業担当者がトランザクションデータが上書きされたり期限切れになることを心配している場合は、Webアプリケーションレベルではなく、データベースレベルで処理する必要があります。 –