Articles of async await

Este é um diagrama correto de como o async-await funciona?

Eu vou estar tentando dar uma palestra sobre async – await e estou criando um streamgrama que tenta mostrar as possíveis ordens de execução. Eu tentei basear isso nos parágrafos O início de um método asynchronous é executado como qualquer outro método. Ou seja, ele é executado de forma síncrona até atingir um “await” (ou […]

Executar operação síncrona no encadeamento Ui

Eu estou tentando desenvolver um aplicativo do Windows e executar em problemas. Eu tenho um MainPage.xaml e 2 outros StartScreen.xaml e Player.xaml. Estou trocando o conteúdo da MainPage se certas condições forem verdadeiras. Então, eu tenho um evento no StartScreen que verifica se existe um diretório ou não, mas ele me joga toda vez que […]

É correto se estou usando aguardar + ToListAsync () sobre IQueryable que não é definido como uma tarefa

Eu estou usando asp.net MVC-5 com EF-6, e não tenho certeza se usando aguardar + ToListAsync é válido. Por exemplo, tenho o seguinte método de repository que retorna um IQueryable: public IQueryable getAllScanEmailTo() { return t.TSets.Where(a=>a.Name.StartsWith(“ScanEmail”)); } E eu estou chamando assim: var emailsTo = await repository.getAllScanEmailTo().ToListAsync(); No começo, pensei que receberia um erro porque […]

Está retornando uma tarefa violando o princípio CQS?

O princípio do CQS ( https://en.wikipedia.org/wiki/Command%E2%80%93query_separation ) afirma que um comando deve retornar nulo. A recomendação para methods asynchronouss é nunca retornar void ( https://msdn.microsoft.com/en-us/magazine/jj991977.aspx ), mas retornar uma tarefa. Então, se eu escrever um comando asynchronous, isso inevitavelmente quebrará o princípio do CQS?

É útil marcar um método asynchronous quando ele apenas aguarda a declaração de retorno?

Somente a última linha do método abaixo está usando ‘await’, logo antes do método retornar, então isso não significa que o método é basicamente síncrono e deve ser chamado apenas de “Get ()” sem o modificador async e o sufixo Async? public virtual async Task GetAsync(Guid id) { // some more code here return await […]

TaskCancellationException como evitar a exceção no stream de controle de sucesso?

Em nossa aplicação trabalhamos muito com async / wait e Tasks. Portanto, ele usa muito o Task.Run, às vezes com suporte a cancelamento usando o CancellationToken incorporado. public Task DoSomethingAsync(CancellationToken cancellationToken) { return Task.Run(() => { while (true) { if (cancellationToken.IsCancellationRequested) break; //do some work } }, cancellationToken); } Se eu cancelar a execução usando […]

Aguardar o resultado da Tarefa usando reflection em um método não genérico

Considere o seguinte caso: class A { public int Id; } class B : A { } class Main { public async Task Create(Type type) { MethodInfo method = this.GetType().GetMethod(“Create”, new Type[] { typeof(string) }).MakeGenericMethod(new Type[] { type }); A a = await (Task)method.Invoke(this, new object[] { “humpf” }); return a.Id; } public async Task […]

Por que funções assíncronas são chamadas duas vezes?

Estou usando o timer de Threading para fazer um trabalho periódico: private static async void TimerCallback(object state) { if (Interlocked.CompareExchange(ref currentlyRunningTasksCount, 1, 0) != 0) { return; } var tasksRead = Enumerable.Range(3, 35).Select(i => ReadSensorsAsync(i)); await Task.WhenAll(tasksRead); var tasksRecord = tasksRead.Where(x => x.Result != null).Select(x => RecordReadingAsync(x.Result)); await Task.WhenAll(tasksRecord); Interlocked.Decrement(ref currentlyRunningTasksCount); } Eu fiz o […]

DebuggerStepThrough, DebuggerHidden não funciona em um método async-await

Quando você ativa o recurso “Quebrar quando uma exceção é acionada” no depurador do Visual Studio, ele é interrompido em todos os lugares para os tipos de exceção selecionados. A maneira de dizer para não quebrar em um método específico é decorar esses methods com o atributo DebuggerStepThrough (ou DebuggerHidden ) . Isso, evidentemente , […]

Passando uma tarefa como parâmetro

Não tenho certeza se isso é possível, então aqui está eu: Eu tenho uma sequência de ações para executar múltiplos async Task MethodA(…) { // some code // a call to specific Async IO bound method // some code } existem também MethodB() , MethodC() , etc, e todos têm exatamente o mesmo código, exceto […]