Tag: async await

asynchronous无效,ASP.Net和杰出操作计数

我想了解为什么ASP.Net应用程序中的asynchronous无效方法可能会导致以下exception,而似乎asynchronous任务不会: System.InvalidOperationException: An asynchronous module or handler completed while an asynchronous operation was still pending 在.NET中,我对于async是一个相对陌生的东西,但是我觉得我已经试图通过一些现有的资源来运行这个资源,包括以下所有内容: 返回void和返回一个Task有什么区别? 这是所有关于SynchronizationContext asynchronous语法糖build议 在ASP.NET中asynchronous 从这些资源中,我明白最好的做法是典型地返回任务并避免asynchronous无效。 我也明白,async void在方法被调用时递增未完成操作的计数,并在完成时递减。 这听起来至less是我的问题的答案的一部分。 但是,我所缺less的是当我返回Task时会发生什么,为什么这样做会使事情“工作”。 这是一个人为的例子来进一步说明我的问题: public class HomeController : AsyncController { // This method will work fine public async Task<ActionResult> ThisPageWillLoad() { // Do not await the task since it is meant to be […]

你必须把Task.Run放在一个方法来使其asynchronous?

我试图了解asynchronous以最简单的forms等待。 我想创build一个非常简单的方法,为了这个例子增加了两个数字,根本没有处理时间,这只是一个例子。 例1: private async Task DoWork1Async() { int result = 1 + 2; } 例2: private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); } 如果我等待DoWork1Async()将代码同步或asynchronous运行? 我是否需要用Task.Run包装同步代码,使该方法等待和asynchronous,以便不阻止UI线程? 我试图找出如果我的方法是一个Task或返回Task<T>我是否需要用Task.Run包装代码使其asynchronous。 愚蠢的问题,我敢肯定,但我看到网上的例子,人们正在等待的代码,没有任何asynchronous内,并没有包裹在Task.Run或StartNew 。

asynchronous是否等待关键字相当于一个ContinueWith lambda?

有人可以请客气,以确认我是否已经正确理解Async等待关键字? (使用CTP版本3) 到目前为止,我已经计算出,在方法调用之前插入await关键字本质上是做了两件事情,它创build了一个立即返回和B.它创build了一个“继续”,在完成asynchronous方法调用时被调用。 在任何情况下,延续是该方法的代码块的其余部分。 所以我想知道的是,这两个代码在技术上是否等价,如果是这样,这基本上是否意味着await关键字与创buildContinueWith Lambda(即:它基本上是一个编译器快捷方式)相同? 如果不是,有什么区别? bool Success = await new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text).Connect(); // At this point the method will return and following code will // only be invoked when the operation is complete(?) MessageBox.Show(Success ? "Logged In" : "Wrong password"); VS (new POP3Connector( "mail.server.com", txtUsername.Text, txtPassword.Text ).Connect()) .ContinueWith((success) => MessageBox.Show(success.Result ? […]

为什么在等待后HttpContext.Current为空?

我有以下testingWebAPI代码,我没有在生产中使用WebAPI,但是由于我在这个问题上的讨论,我做了这个: WebAPIasynchronous问题 无论如何,这是有问题的WebAPI方法: public async Task<string> Get(int id) { var x = HttpContext.Current; if (x == null) { // not thrown throw new ArgumentException("HttpContext.Current is null"); } await Task.Run(() => { Task.Delay(500); id = 3; }); x = HttpContext.Current; if (x == null) { // thrown throw new ArgumentException("HttpContext.Current is null"); } return "value"; } […]

是否有任何asynchronous的Process.Start?

就像标题所暗示的那样,是否有等同于Process.Start (允许您运行另一个应用程序或batch file),我可以等待? 我正在玩一个小的控制台应用程序,这似乎是一个完美的地方,使用asynchronous和等待,但我找不到这种情况下的任何文档。 我在想什么是这样的: void async RunCommand() { var result = await Process.RunAsync("command to run"); }

什么是新的C#等待function?

任何人都可以解释什么await函数呢?

等待一个完成的任务相同的task.Result?

我目前正在阅读Stephen Cleary的“C#Cookbook中的并发”,并且我注意到了以下技术: var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask; downloadTask是对httpclient.GetStringAsync的调用,并且timeoutTask正在执行Task.Delay。 如果没有超时,那么downloadTask已经完成。 为什么有必要做一秒钟的等待,而不是返回downloadTask.Result,鉴于任务已经完成?

是否有可能等待一个事件,而不是另一个asynchronous方法?

在我的C#/ XAML metro应用程序中,有一个button可以启动长时间运行的程序。 所以,build议,我使用asynchronous/等待,以确保UI线程不会被阻止: private async void Button_Click_1(object sender, RoutedEventArgs e) { await GetResults(); } private async Task GetResults() { // Do lot of complex stuff that takes a long time // (eg contact some web services) … } 偶尔,GetResults内发生的事情需要额外的用户input才能继续。 为了简单起见,假设用户只需点击一个“继续”button。 我的问题是: 如何暂停执行GetResults,以等待事件 ,如点击另一个button? 这是一个丑陋的方式来实现我正在寻找:继续的事件处理程序“button设置一个标志… private bool _continue = false; private void buttonContinue_Click(object sender, RoutedEventArgs […]

为什么我不能在locking语句的主体中使用“await”操作符?

C#(.NETasynchronousCTP)中的await关键字不允许来自locking语句中。 来自MSDN : awaitexpression式不能用于同步函数,查询expression式,exception处理语句的catch或finally块, lock语句的块或不安全的上下文中。 我认为这对于编译器团队来说由于某种原因而难以实现。 我试图解决使用声明: class Async { public static async Task<IDisposable> Lock(object obj) { while (!Monitor.TryEnter(obj)) await TaskEx.Yield(); return new ExitDisposable(obj); } private class ExitDisposable : IDisposable { private readonly object obj; public ExitDisposable(object obj) { this.obj = obj; } public void Dispose() { Monitor.Exit(this.obj); } } } // example usage using […]

asynchronous/等待与BackgroundWorker

在过去的几天里,我testing了.net 4.5和c#5的新特性。 我喜欢它的新asynchronous/等待function。 早些时候,我曾经使用BackgroundWorker在响应式UI的背景下处理更长的stream程。 我的问题是:有了这些很好的新function,什么时候应该使用async / await和BackgroundWorker ? 哪两个都是常见的情况?