Articles of async await

Attività a lunga esecuzione in WebAPI

Ecco il mio problema: ho bisogno di chiamare più metodi di terze parti all’interno di un ApiController. La firma per questi metodi è Task DoSomethingAsync(SomeClass someData, SomeOtherClass moreData) . Voglio che quelle chiamate continuino a essere eseguite in background, dopo che ApiController ha inviato i dati al client. Al termine di DoSomethingAsync desidero eseguire la […]

Async Void, ASP.Net e Count of Outstanding Operations

Sto cercando di capire perché un metodo di vuoto asincrono in un’applicazione ASP.Net può causare la seguente eccezione, mentre sembra che l’attività asincisa non: System.InvalidOperationException: An asynchronous module or handler completed while an asynchronous operation was still pending Sono relativamente nuovo al mondo di async in .NET, ma mi sento come se avessi provato a […]

Modello per chiamare il servizio WCF usando async / await

Ho generato un proxy con operazioni basate sulle attività . Come dovrebbe essere invocato correttamente questo servizio (smaltimento di ServiceClient e OperationContext seguito) utilizzando async / await? Il mio primo tentativo è stato: public async Task GetHomeInfoAsync(DateTime timestamp) { using (var helper = new ServiceHelper()) { return await helper.Proxy.GetHomeInfoAsync(timestamp); } } Essere ServiceHelper una class […]

Parallel.ForEach vs Task.Run e Task.WhenAll

Quali sono le differenze tra l’utilizzo di Parallel.ForEach o Task.Run () per avviare un insieme di attività in modo asincrono? Versione 1: List strings = new List { “s1”, “s2”, “s3” }; Parallel.ForEach(strings, s => { DoSomething(s); }); Versione 2: List strings = new List { “s1”, “s2”, “s3” }; List Tasks = new List(); […]

Perché dovrei preferire il singolo ‘attendere Task.WhenAll’ su più attese?

Nel caso in cui non mi interessa l’ordine di completamento dell’attività e solo bisogno di tutti loro per completare, devo ancora utilizzare await Task.WhenAll invece di più await ? Ad esempio, DoWord2 è il metodo preferito per DoWork1 (e perché?): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static async Task DoTaskAsync(string name, […]

Le operazioni di rete asincrone non finiscono mai

Ho diverse operazioni di rete asincrona che restituiscono un’attività che potrebbe non finire mai: UdpClient.ReceiveAsync non accetta un CancellationToken TcpClient.GetStream restituisce un NetworkStream che non rispetta il CancellationToken su Stream.ReadAsync (verifica dell’annullamento solo all’inizio dell’operazione) Entrambi aspettano un messaggio che potrebbe non arrivare mai (a causa della perdita di pacchetti o di nessuna risposta, ad […]

Imansible lanciare l’errore da una funzione esecutore promise asincrona

Ho cercato di ottenere una comprensione concettuale del motivo per cui il seguente codice non cattura il throw . Se rimuovi la parola chiave async dalla new Promise(async (resolve, … parte allora funziona bene, quindi ha a che fare con il fatto che l’esecutore Promessa è una funzione asincrona. (async function() { try { await […]

Parallel.ForEach e async-await

Ho avuto un tale metodo: public async Task GetResult() { MyResult result = new MyResult(); foreach(var method in Methods) { string json = await Process(method); result.Prop1 = PopulateProp1(json); result.Prop2 = PopulateProp2(json); } return result; } Quindi ho deciso di utilizzare Parallel.ForEach : public async Task GetResult() { MyResult result = new MyResult(); Parallel.ForEach(Methods, async method […]

Come proteggere le risorse che possono essere utilizzate in un ambiente multi-thread o asincrono?

Sto lavorando su un’API C # utilizzata da una varietà di consumatori. Questa API fornisce l’accesso a una risorsa condivisa (nel mio caso l’hardware che fa comunicazione seriale), che spesso ha alcuni attori diversi che cercano di usarlo contemporaneamente. Il problema che ho è che alcuni dei miei consumatori vorranno usarlo in un ambiente multi-thread: […]

Perché HttpContext.Current è null dopo l’attesa?

Ho il seguente codice WebAPI di test, non utilizzo WebAPI in produzione ma l’ho fatto a causa di una discussione che avevo su questa domanda: domanda asincrona WebAPI Ad ogni modo, ecco il metodo WebAPI incriminato: public async Task Get(int id) { var x = HttpContext.Current; if (x == null) { // not thrown throw […]