fredfmiranda / TesteS3SQS

0 stars 0 forks source link

Método main não assincrono/lock de recursos #3

Open tkrafael opened 1 year ago

tkrafael commented 1 year ago

https://github.com/fredfmiranda/TesteS3SQS/blob/f1af930c33819d4b2b3ead9f20294976f4872caa/AppUploadS3Bucket/Program.cs#L36 O método main não é assíncrono. Caso essa aplicação rode em outro contexto (windows forms, console stathread), é possível acontecer lock na aplicação devido à chamada Wait do transfer utility. Como resolver?

fredfmiranda commented 1 year ago

@tkrafael bom se eu não puder tornar o Main assíncrono (no meu caso era senão me engano lá na Program): mas uma opção seria garantir que UploadFilesAsync() e qualquer método assíncrono subsequente chamado dentro dele usem ConfigureAwait(false). Ia ficar assim:

public async Task UploadFilesAsync() { await algumMétodoAssincronoSubsequente().ConfigureAwait(false); }

Isso ajuda a evitar o deadlock ao dizer ao runtime para não tentar sincronizar o contexto após a conclusão da tarefa. Ou então outra opção seria usar Task.Run para executar a operação em um contexto que não captura o contexto atual, como este. Por ex:

Task.Run(() => UploadFilesAsync()).Wait();