Articles of task parallel library

C’è qualcosa come BlockingCollection asincrona ?

Mi piacerebbe await il risultato di BlockingCollection.Take() modo asincrono, quindi non blocco il thread. Alla ricerca di qualcosa di simile: var item = await blockingCollection.TakeAsync(); So che potrei fare questo: var item = await Task.Run(() => blockingCollection.Take()); ma questo tipo uccide l’intera idea, perché invece un altro thread (di ThreadPool ) viene bloccato. C’è qualche […]

HttpClient: un’attività è stata cancellata?

Funziona bene quando una o due attività generano comunque un errore “Un’attività è stata annullata” quando sono elencate più attività. List allTasks = new List(); allTasks.Add(….); allTasks.Add(….); Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken); private static Task HttpClientSendAsync(string url, object data, HttpMethod method, string contentType, CancellationToken token) { HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url); HttpClient httpClient = new HttpClient(); httpClient.Timeout […]

Utilizzare Task.Run () nel metodo sincrono per evitare deadlock in attesa sul metodo async?

AGGIORNAMENTO Lo scopo di questa domanda è ottenere una risposta semplice su Task.Run() e deadlocking. Capisco molto il ragionamento teorico per non mischiare asincrono e sincronizzazione, e li prendo a cuore. Non sto sopra imparando cose nuove dagli altri; Cerco di farlo ogni volta che posso. Ci sono solo momentjs in cui tutto ciò di […]

Il modo migliore per convertire il metodo async basato su callback in attività attendibili

Quale sarebbe il modo migliore per convertire / avvolgere un metodo asincrono “classico” che utilizza un callback a qualcosa che restituisce un’attività (attendibile)? Ad esempio, dato il seguente metodo: public void GetStringFromUrl(string url, Action onCompleted); L’unico modo che conosco per avvolgere questo in un metodo che restituisce un compito è: public Task GetStringFromUrl(string url) { […]

Differenza tra il ritorno e l’attesa di un’attività in un metodo asincrono

C’è qualche differenza tra i metodi qui sotto? Uno è preferibile rispetto all’altro? public static async Task SendAsync1(string to, string subject, string htmlBody) { // … await smtp.SendMailAsync(message); // No return statement } public static Task SendAsync2(string to, string subject, string htmlBody) { // … return smtp.SendMailAsync(message); } Questo metodo verrà chiamato dai metodi del […]

Dove posso trovare una versione di stream di dati TPL per 4.0?

Sto cercando la versione .NET 4.0 della libreria del stream di dati TPL. Il pacchetto Nuget ha una versione 4.0 della libreria, ma sembra avere come destinazione .NET 4.5. Ho trovato vari riferimenti a una versione 4.0, come in questo forum: http://social.msdn.microsoft.com/Forums/en-US/tpldataflow/thread/6206c714-6dee-4d17-a880-26d0c137a167 Ma il link citato mi ha appena reindirizzato alla pagina di Nuget della […]

Elabora la coda con multithreading o attività

Ho un’applicazione per messaggi telefonici in cui ci sono molti messaggi da elaborare. Perché le porte telefoniche sono limitate, quindi il messaggio verrà elaborato prima nella prima uscita. Ogni messaggio ha un contrassegno “Riconoscimento” che indica che viene elaborato. È stato inizializzato come falso, naturalmente. Voglio mettere tutti i messaggi in una coda, quindi elaborarli […]

AspNetSynchronizationContext e attendi continuazioni in ASP.NET

Ho notato uno switch di thread inaspettato (e direi ridondante) dopo l’ await nel metodo di controllo asincrono ASP.NET Web API. Ad esempio, di seguito mi aspetto di vedere lo stesso ManagedThreadId nelle posizioni # 2 e 3 #, ma il più delle volte vedo un thread diverso al # 3: public class TestController : […]

Accesso ai controlli dell’interfaccia utente in Task.Run con async / attendere su WinForms

Ho il seguente codice in un’applicazione WinForms con un pulsante e un’etichetta: using System; using System.IO; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void button1_Click(object sender, EventArgs e) { await Run(); } private async Task Run() { await Task.Run(async () => […]

Modo corretto per ritardare l’inizio di un’attività

Voglio pianificare un’attività da avviare in x ms e riuscire a cancellarla prima che inizi (o solo all’inizio dell’attività). Il primo tentativo sarebbe qualcosa di simile var _cancelationTokenSource = new CancellationTokenSource(); var token = _cancelationTokenSource.Token; Task.Factory.StartNew(() => { token.ThrowIfCancellationRequested(); Thread.Sleep(100); token.ThrowIfCancellationRequested(); }).ContinueWith(t => { token.ThrowIfCancellationRequested(); DoWork(); token.ThrowIfCancellationRequested(); }, token); Ma sento che dovrebbe esserci un […]