Articles of task parallel library

Come ottenere un’attività NON da eseguire sul thread dell’interfaccia utente

Il seguente codice è una semplificazione di un codice in un’applicazione reale. Il problema di seguito è che verrà eseguito un lungo lavoro nel thread dell’interfaccia utente, anziché un thread in background. void Do() { Debug.Assert(this.Dispatcher.CheckAccess() == true); Task.Factory.StartNew(ShortUIWork, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); } void ShortUIWork() { Debug.Assert(this.Dispatcher.CheckAccess() == true); Task.Factory.StartNew(LongWork, TaskCreationOptions.LongRunning); } void LongWork() { […]

Come svuotare un BlockingCollection

Ho un thread che aggiunge elementi a BlockingCollection . Su un altro thread sto usando foreach (var item in myCollection.GetConsumingEnumerable()) Se c’è un problema, voglio uscire dal mio foreach e dal mio metodo e cancellare tutto ciò che è rimasto in BlockingCollection ma non riesco a trovare un modo per farlo. Qualche idea?

Scalabilità di codice parallelo scadente

Recentemente ho analizzato come i miei calcoli paralleli effettivamente accelerino sul processore a 16 core. E la formula generale che ho concluso – più thread hai meno velocità per core che ottieni – mi imbarazza. Ecco i diagrammi del mio carico della CPU e della velocità di elaborazione: Quindi, puoi vedere che il carico del […]

Come aggregare i dati di un produttore asincrono e scriverlo in un file?

Sto imparando i pattern asincrona / attendi in C #. Attualmente sto cercando di risolvere un problema come questo: C’è un produttore (un dispositivo hardware) che genera 1000 pacchetti al secondo. Ho bisogno di registrare questi dati su un file. Il dispositivo ha solo un metodo ReadAsync() per segnalare un singolo pacchetto alla volta. Ho […]

Libreria parallela task – Parallelismo su single core

Sto lavorando su un’applicazione WPF. In una schermata / vista devo fare 6 chiamate a un servizio WCF. Nessuna di queste chiamate è correlata nel senso che non condividono i dati né dipendono l’uno dall’altro. Sto pensando di utilizzare TPL e rendere queste 6 chiamate di servizio WCF come 6 attività. Ora l’applicazione potrebbe essere […]

Parallel.ForEach () modifica il contesto di rappresentazione

Oggi abbiamo implementato la nostra nuova applicazione ASP.NET sul server e presto ci siamo resi conto che c’era uno strano problema di sicurezza che stava causando l’arresto anomalo dell’applicazione. Questa è un’applicazione interna e usiamo la rappresentazione per gestire il modo in cui gli utenti accedono alle risorse. L’applicazione, tuttavia, genera un’eccezione “Accesso negato” quando […]

Traccia le istanze di WebDriver morte durante l’attività parallela

Sto vedendo alcune stranezze di istanze morte che eseguono test di stress web a ciclo nidificato in parallelo usando Selenium WebDriver, semplice esempio essendo, per esempio, colpendo 300 pagine univoche con 100 impressioni ciascuna. Sto “riuscendo” a ottenere da 4 a 8 istanze di WebDriver che utilizzano un ThreadLocal per isolarli per thread di attività […]

Task.Factory.StartNew vs metodi Async

Potrebbe essere una domanda banale, ma potrebbe aiutarmi nella comprensione di base. C’è qualche differenza importante tra le due seguenti implementazioni? Task.Factory.StartNew : public Task ReadAllTextAsync(string path) { return Task.Factory.StartNew(() => File.ReadAllText(path)); } Metodo asincrono su StreamReader : public async Task ReadAllTextAsync(string path) { using (var stream = File.OpenRead(path)) using (var reader = new StreamReader(stream)) […]

Tieni traccia dei progressi durante l’utilizzo di Parallel.ForEach di TPL

Qual è il modo migliore per monitorare i progressi nel seguito long total = Products.LongCount(); long current = 0; double Progress = 0.0; Parallel.ForEach(Products, product => { try { var price = GetPrice(SystemAccount, product); SavePrice(product,price); } finally { Interlocked.Decrement(ref this.current); }}); Voglio aggiornare la variabile progress da 0.0 a 1.0 (corrente / totale) ma non […]

Come faccio a convertire .net 4.5 Async / Await back to 4.0

Come sarebbe l’equivallent asp.net mvc 4.0 code? using System.Net; using System.Net.Http; using System.Web.Mvc; using System.Threading.Tasks; using Newtonsoft.Json; namespace Web.Controllers { public class HomeController : Controller { private HttpClient httpClient = new HttpClient(); private static dynamic shots; public async Task Index() { if (shots == null) { try { var responseMessage = await httpClient.GetAsync (“http://api.dribbble.com/shots/everyone?per_page=30”); responseMessage.EnsureSuccessStatusCode(); […]