Tag: 异步

异步HttpHandlers和WriteAsync

我一直在Ayende Rahien的博客上试验一些代码,这些代码使用异步HttpHandler来改进可以同时处理的请求数量。 不幸的是,我甚至可以得到基本的例子。 我收到以下错误: ‘System.IO.TextWriter’不包含’WriteAsync’的定义,并且没有可以找到接受类型’System.IO.TextWriter’的第一个参数的扩展方法’WriteAsync’(您是否缺少using指令或程序集引用?) 为线。 return context.Response.Output.WriteAsync(“Hello World!”); 我想这个方法是net4中添加的扩展方法,作为Parallel Extensions的一部分,但是对于我的生活,我可以找到正确的命名空间。 Wouls你们任何一个铁杆csharpers请揭开光明。

use invoke和synchronizationcontext.Post对象有什么区别?

当我收到与线程上下文相关的exception时,我使用委托函数并调用此委托函数。 来自其他线程的使用控制是必要的。 但我刚学会了我可以使用SynchronizationContext.Post()函数,我可以在这个方法中调用我的委托。 但我不确定哪一个更好? 或者这些方法有什么区别。 非常感谢。

将async添加到方法签名是一个重大变化吗?

在解决有关使用异步/等待多少的问题时,即“所有方法应该返回Task吗?”, 这个答案的作者MatíasFidemraizer声称,即使你的方法目前只做同步的东西,它仍然应该返回任务,所以如果你以后做了异步的东西,“你可以把它变成实际的异步操作而不影响整个代码库”。 这是有道理的,但如果我实际上在等待某些东西,我必须在方法签名中添加async 。 所以我们谈论的是: public Task WhateverAsync() { return Task.FromResult(true); } 至 public async Task WhateverAsync() { return await AwaitableSomething(); } 将async添加到方法签名是一个重大变化吗?

异步内存流方式:以下哪项?

我正在研究使用异步内存流的解决方案,我正在考虑实现这种方法的正确方法。 哪一个比较方便? 第一个,简单: //First approach: linear async private async static Task WriteToStreamFirstVariant() { MemoryStream memoryStream = new MemoryStream(); byte[] data = new byte[256]; try { await memoryStream.WriteAsync(data, 0, data.Length); } catch(Exception exception) { //Handling exception } finally { memoryStream.Dispose(); } } 或者第二个嵌套任务和闭包? //Second approach: nested tasks async private async static Task WriteToStreamSecondVariant() { await Task.Run(async […]

具有异步Session_Start方法时的会话问题?

我最近开始使用.NET 4.5而不是.NET 4.0,我喜欢asyncfunction。 但是,当在我的Global.asax中的Session_Start事件中在ASP .NET中使用它时,无论我做什么(如果我执行await并访问会话),它都会导致错误。 这是代码。 我相信你可以复制这个问题。 问题是 – 我该如何解决? protected async void Session_Start(object sender, EventArgs e) { var stuff = await UserAccess.RetrieveSomeStuff(); Session[“Stuff”] = stuff; } 我收到的错误如下。 在异步操作仍处于挂起状态时完成异步模块或处理程序。 我也试过以下代码没有运气。 protected void Session_Start(object sender, EventArgs e) { var stuffTask = UserAccess.RetrieveSomeStuff(); stuffTask.Wait(); Session[“Stuff”] = stuffTask.Result; } 在那种情况下,它将持续处于WaitingForActivation状态,这可能表明它没有被放入系统要执行的任务队列中(可能是因为系统正在等待Wait()调用本身完成? )。 我也试过手动启动任务。 在这种情况下,它只会崩溃,因为您无法手动启动任务。 就我而言,它必须由系统来完成。 任何线索? 这个很难。

PageMethods和Session

我已经搜索了这个解决方案的高低。 任何见解将受到高度赞赏。 情况:当在单个页面中有多个PageMethod调用时,每个方法调用都会对Session对象进行锁定,从而阻塞。 只有将@Page指令转为False|ReadOnly才能使PageMethod调用异步 结果:当Page指令是默认值(读/写)但会话未在页面的任何位置使用时,不会阻止调用。 在页面级别对会话的任何读取或写入都会阻止页面方法调用。 问题:在@Page指令@Page EnableSessionState=ReadOnly是非常严格的,并且不想采用该路由。 pagemethod调用可以阻止吗? 并仍然访问会话? (可能不是写但只是阅读)

如何在某些方法执行时在aspx页面(WebForms)中显示等待进程

如何在我的ASPX网页中显示某种类型的消息( 我正在使用WebForms,而不是MVC ),这表示我的项目的某些方法正在执行时作为“等待进程”。 我不是在询问如何制作一些HTML / CSS / DOM的东西,我要求更多关于异步检查的内容。 例如:来自网络的一些数据可能不会很快传递给客户端,并且当它确实发生时 – 它对用户来说看起来非常难看。 它只是空闲而且看起来像一个有bug的页面,其中没有明显突出的状态( 许多用户不在浏览器中观看页面加载状态,他们希望在Web应用程序中完全查看它,如在桌面应用程序中 )。 我想显示一条消息,如“等待操作结束” ,我不知道如何在我的ASPX页面中进行异步检查,以便在某些方法执行时获取当前状态( 它们是否已完成等等… ) 。 我真正想要的是伪代码: while (methodExecuting) show(waitMessage); 如何在ASP.NET项目的WebForms中完成?

任务状态:等待激活-DownloadStringTaskAsync -WP8

任务的状态始终是“等待激活”。任务的结果=“”。 我不明白为什么…感谢您的帮助UI调用GetDocLibs方法。 public class ServerFunctions { public static List GetDocLibs(bool onlyDocLibPerso) { string xmlContent = GetXml(); List result = BdeskDocLib.GetListFromXml(xmlContent, onlyDocLibPerso); return result; } private static String GetXml() { Tasktask=requesteur.Query(dataRequestParam); task.Wait(); xmlResult = task.Result; return xmlResult; } } public class DataRequest { public Task Query(DataRequestParam dataRequestParam) { try { WebClient web = new WebClient(); if […]

Async / Await Lambdas

我有一个奇怪的问题,结合async / await使它工作:我创建了一个小程序,它应该基本上处理每个动作的try / catch: internal static void HandledAction(Action action, Info infoBar) { try { action(); } catch (Exception ex) { infoBar.SetError(“An Exception occured: ” + ex.Message); WriteLog(ex.StackTrace); } 看起来很花哨,但它的价值很高,因为改变error handling非常容易。 但是,如果我想在Lambda中获取数据异步,会发生什么? 让我们举一个简单的例子: private void mnuImportData_Click(object sender, RoutedEventArgs e) { ActionHelper.HandledAction(async () => { throw new NotImplementedException(“Ups”); }, infoMain); } 当然,HandledAction被调用,传递,因为它返回指针,exception被抛出,当然不会被处理。 我想我必须创建一个AsyncHandledAction,并设置动作异步,但有没有更简单的方法来解决这个问题? 我想很多人都使用中央exception处理,并且有更好的解决方案吗? 提前致谢 马蒂亚斯 […]

使用async / await将现有C#同步方法转换为异步?

从同步I / O绑定方法开始(如下所示),如何使用async / await使其异步? public int Iobound(SqlConnection conn, SqlTransaction tran) { // this stored procedure takes a few seconds to complete SqlCommand cmd = new SqlCommand(“MyIoboundStoredProc”, conn, tran); cmd.CommandType = CommandType.StoredProcedure; SqlParameter returnValue = cmd.Parameters.Add(“ReturnValue”, SqlDbType.Int); returnValue.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); return (int)returnValue.Value; } MSDN示例都假设存在* Async方法,并且没有为I / O绑定操作自己创建一个指导。 我可以使用Task.Run()并在该新任务中执行Iobound(),但不鼓励创建新任务,因为该操作不受CPU限制。 我想使用async / await,但我仍然坚持这个如何继续转换此方法的基本问题。