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 […]
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 […]
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 […]
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) { […]
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 […]
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 […]
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 […]
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 : […]
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 () => […]
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 […]