Ho il seguente frammento di codice:
public Task DistributeAsync(BankAccount account, decimal amount)
{
lock (account)
{
return repository.AddLoanAsync(account, amount).ContinueWith(task =>
{
if (!task.Result)
{
throw new LoanException();
}
}
}
}
// Somewhere else in the code:
var distributeTask = distributor.DistributeAsync(bankAccount, 42000);
E mi chiedo come posso riscriverlo correttamente usando async
/ await
parole chiave per una maggiore leggibilità. Attualmente sto affrontando il problema che non sono autorizzato a utilizzare await
nel corpo di un'istruzione lock
. Sarebbe apprezzato qualsiasi aiuto per farmi nella giusta direzione.
Sono consapevole che l'istruzione lock non è thread-safe, questo frammento fa parte di un esercizio più grande e un'altra domanda è spiegare perché quel lock non aiuta a rendere sicuro il thread del codice!