Articles of task paralela biblioteca

ConfigureAwait envia a continuação para um encadeamento de pool

Aqui está um código do WinForms: async void Form1_Load(object sender, EventArgs e) { // on the UI thread Debug.WriteLine(new { where = “before”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); var tcs = new TaskCompletionSource(); this.BeginInvoke(new MethodInvoker(() => tcs.SetResult(true))); await tcs.Task.ContinueWith(t => { // still on the UI thread Debug.WriteLine(new { where = “ContinueWith”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false); […]

Qual é a vantagem de usar async com MVC5?

Qual é a diferença entre: public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, model.Password, model.RememberMe); if (result.Success) { return Redirect(“~/home”); } else { AddErrors(result); } } return View(model); } e: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = await […]

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 […]