Articles of task paralela biblioteca

Parallel.ForEach e async-await

Eu tinha esse método: 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; } Então decidi usar o Parallel.ForEach : public async Task GetResult() { MyResult result = new MyResult(); Parallel.ForEach(Methods, async method => { […]

Cancelando uma tarefa pendente de forma síncrona no encadeamento da interface do usuário

Às vezes, depois de solicitar o cancelamento de uma tarefa pendente com CancellationTokenSource.Cancel , preciso garantir que a tarefa tenha atingido adequadamente o estado cancelado antes que eu possa continuar. Na maioria das vezes, enfrento essa situação quando o aplicativo está sendo encerrado e desejo cancelar todas as tarefas pendentes normalmente. No entanto, ele também […]

Async / await vs BackgroundWorker

Nos últimos dias, testei os novos resources do .net 4.5 e c # 5. Eu gosto de seus novos resources async / await. Anteriormente, eu usava o BackgroundWorker para lidar com processos mais longos em segundo plano com a interface do usuário responsiva. Minha pergunta é: depois de ter esses novos resources legais, quando devo […]

Como limitar a quantidade de operações de E / S assíncronas simultâneas?

// let’s say there is a list of 1000+ URLs string[] urls = { “http://google.com”, “http://yahoo.com”, … }; // now let’s send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); Aqui está o problema, ele inicia mais de 1000 […]

Método de uso geral FromEvent

Usando o novo modelo async / await, é bastante simples gerar uma Task que é concluída quando um evento é triggersdo; você só precisa seguir esse padrão: public class MyClass { public event Action OnCompletion; } public static Task FromEvent(MyClass obj) { TaskCompletionSource tcs = new TaskCompletionSource(); obj.OnCompletion += () => { tcs.SetResult(null); }; return […]

Prática recomendada para chamar ConfigureAwait para todo o código do lado do servidor

Quando você tem código do lado do servidor (isto é, algum ApiController ) e suas funções são assíncronas – então elas retornam Task – é considerada uma boa prática que, a qualquer momento, você aguarde as funções que chamar de ConfigureAwait(false) ? Eu tinha lido que é mais performático, uma vez que não tem que […]

Aninhamento aguardar em Parallel.ForEach

Em um aplicativo do metrô, preciso executar várias chamadas do WCF. Há um número significativo de chamadas a serem feitas, então eu preciso fazê-las em um loop paralelo. O problema é que o loop paralelo sai antes que as chamadas do WCF sejam concluídas. Como você refatoraria isso para funcionar como esperado? var ids = […]

Como cancelar a tarefa que aguarda após um período de tempo limite

Eu estou usando esse método para instanciar um navegador da Web por meio de programação, navegue até um URL e retorne um resultado quando o documento for concluído. Como eu seria capaz de parar a Task e ter GetFinalUrl() retornar null se o documento leva mais de 5 segundos para carregar? Já vi muitos exemplos […]

Um exemplo de asynchronous / aguardar que causa um impasse

Eu me deparei com algumas práticas recomendadas para programação assíncrona usando as palavras-chave async / await do c # (eu sou novo no c # 5.0). Um dos conselhos dados foi o seguinte: Estabilidade: conheça seus contextos de synchronization … Alguns contextos de synchronization são não reentrantes e single-threaded. Isso significa que apenas uma unidade […]

Aguarde vs Task.Wait – Deadlock?

Eu não entendo muito bem a diferença entre Task.Wait e await . Eu tenho algo semelhante às seguintes funções em um serviço WebAPI do ASP.NET: public class TestController : ApiController { public static async Task Foo() { await Task.Delay(1).ConfigureAwait(false); return “”; } public async static Task Bar() { return await Foo(); } public async static […]