我正面临着devise方法与执行networkingI / O(对于可重用的库)的问题。 我读过这个问题 c#5在APIdevise中等待/asynchronous模式 还有其他更接近我的问题。 所以,问题是,如果我想提供asynchronous和非asynchronous方法,我怎么devise这些? 例如,要公开一个方法的非asynchronous版本,我需要做类似的事情 public void DoSomething() { DoSomethingAsync(CancellationToken.None).Wait(); } 我觉得这不是一个好devise 我想build议(例如)如何定义私有方法,可以包装在公共的提供两个版本。
我想了解如何在C#中等待asynchronous工作,有一件事情让我困惑不已。 我明白任何使用await关键字的方法都必须用async标记。 我的理解是,当一个关于await关键字的行被击中时,该行下面的代码不会被执行。 asynchronous操作开始在等待线中进行语句,控制返回到可以继续执行的调用方法。 问题1:这个假设是正确的还是await关键字下面的代码仍然被执行? 其次,假设我调用一个服务方法asynchronous,并需要返回其结果。 return语句在await关键字下面。 问题2:在asynchronous调用完成之后或之前何时触发return语句? 问题3:我想使用该服务调用的结果和asynchronous操作不会帮助因为我希望返回结果时命中调用方法。 我知道这可以通过使用调用synchronus的Result属性来完成。 但是,在数据库操作中使用asynchronous的原因是在大多数应用程序中实际占用了80%的时间。 问题4:如何使用数据库操作的asynchronous? 这是可能的和推荐的? 问题5:asynchronous操作在哪些情况下会有用,似乎每个API都只是在没有理由的情况下进行asynchronous操作? 还是我错过了使用asynchronous操作点? 我的意思是说api在没有理由的情况下使用asyn方法,是因为方法必须返回一些东西,直到计算结果如何返回,所以在本质上这个调用将不会被阻塞,直到它没用结果返回?
我已经做了相当多的search。 不过,对Node.js的package.json中的主要参数仍有疑问。 如何填补这个领域的帮助? 以另一种方式提问,如果该字段存在,我可以以不同的样式启动模块吗? 我可以将多个脚本填充到主参数中吗? 如果是的话,他们会开始两个线程? 如果不是,我该如何在模块中启动两个脚本并让它们并行运行? 我知道第二个问题很奇怪。 这是因为我在OpenShift上托pipe了一个Node.js应用程序,但应用程序由两个主要组件组成。 一个是REST API,另一个是通知传递服务。 如果它们被实现为单个线程,我担心通知传递过程会阻塞REST API。 但是,他们必须连接到相同的MongoDB盒式磁带。 此外,如果可能的话,两个部件可以在同一个档位上工作,我想节省一个档位。 任何build议,欢迎。
我有一个像这样的方法: private async void DoStuff(long idToLookUp) { IOrder order = await orderService.LookUpIdAsync(idToLookUp); // Close the search IsSearchShowing = false; } //Other stuff in case you want to see it public DelegateCommand<long> DoLookupCommand{ get; set; } ViewModel() { DoLookupCommand= new DelegateCommand<long>(DoStuff); } 我想unit testing它是这样的: [TestMethod] public void TestDoStuff() { //+ Arrange myViewModel.IsSearchShowing = true; // container […]
我试图深入探讨新的C ++ 11标准的所有选项,同时使用std :: async并阅读它的定义,我注意到了2件事,至less在linux下使用gcc 4.8.1: 它被称为asynchronous ,但它有一个真正的“顺序行为”,基本上在你调用与你的asynchronous函数foo相关联的未来的行中,程序阻塞直到foo执行完成。 它依赖于与其他外部库完全相同的外部库,以及更好的非阻塞解决scheme,这意味着pthread ,如果要使用std::async ,则需要pthread。 在这一点上,我很自然的问为什么selectstd :: async而不是一组简单的函子呢? 这个解决scheme甚至根本就没有规模,你呼叫的未来越多,程序响应也就越less。 我错过了什么吗? 你能否展示一个被授予以asynchronous,非阻塞方式执行的例子?
我们正在构build一个基于位置的消息应用程序,使用Parse.com作为后端(Parse.com类似于Urban Airship / PubNub等),我们现在想切换到我们自己的后端,以便更好地控制。 为此,我们已经构build了一个基于node.js的后端,通过REST API公开了function 为了使用这个API,我们要构build一个Android库(类似于Parse.com的Android SDK ),它抽象所有的HTTP Requests / Response或者REST API调用,并为getUsers(),sendMessage()等各种操作提供直接的函数 在Android中实现REST API客户端的方法: 使用IntentService + ResultReceiver 服务 的AsyncTask 使用装载机 现在,考虑到我们要构build一个Android库,并且在用户与应用程序进行交互时可能会同时发生REST API调用,哪种方法最适合继续使用? 我也接受其他build议/build议。 更新 :我们首先使用IntentService + ResultReceiverbuild立我们自己的库,它工作正常。 但是我们后来偶然发现了Android Async Http 。 用它。 这很棒!
我一直在寻找2对以上的差异,但没有find任何文章解释清楚,以及何时使用这个或那个。 那么SaveChanges()和SaveChangesAsync()什么区别呢? 和Find()和FindAsync() ? 在服务器端,当我们使用Async方法时,我们也需要添加await 。 因此,我不认为它是服务器端的asynchronous。 这是否有助于防止客户端浏览器上的UI阻塞? 或者他们之间有什么优点和缺点?
有人可以解释什么是这意味着一个同步方法? 如果我尝试将方法更改为async然后VS抱怨它。 这工作: public Task MethodName() { return Task.FromResult<object>(null); } 这不起作用: public async Task MethodName() { return Task.FromResult<object>(null); } 所以基本上我想知道这意味着什么: Task.FromResult<object>(null);
微软今天(2010年10月28日)发布了Visual StudioasynchronousCTP ,将async和await关键字引入到C#/ VB中,用于执行asynchronous方法。 首先,我认为编译器将关键字转换为线程的创build,但是根据白皮书和Anders Hejlsberg的PDC演示 (在31:00),asynchronous操作完全在主线程上发生。 我怎么能在同一个线程上并行执行一个操作? 在技术上怎么可能以及在IL中实际翻译的function是什么?
一般的回答,比如在这里和这里给大家的问题不是使用asynchronous/等待,而是使用Task.Run或者TaskFactory.StartNew传入同步方法。 但是,有时候我想忘记的方法是asynchronous的,没有等效的同步方法。 更新注意/警告:正如Stephen Cleary指出的那样,在您发送回应之后继续处理请求是很危险的。 原因是因为AppDomain可能会在该作业仍在进行时closures。 请参阅他的回应链接了解更多信息。 无论如何,我只是想提前指出,这样我就不会让任何人走错路。 我认为我的情况是有效的,因为实际的工作是由不同的系统(不同的服务器上的不同的计算机)完成的,所以我只需要知道消息已经离开了那个系统。 如果发生exception,那么服务器或用户就无法做到这一点,也不会影响用户,所有我需要做的就是引用exception日志并手动清除(或实现一些自动化机制)。 如果AppDomain被closures,我将在远程系统中有一个残留文件,但是我将把它作为通常的维护周期的一部分,并且由于它的存在不再被我的Web服务器(数据库)所知,并且它的名字是唯一的时间戳,它不会导致任何问题,而它仍然徘徊。 如果我能够像斯蒂芬·克里里指出的那样使用持久性机制,那将是理想的,但是不幸的是我现在不在这个时候。 我认为只是假装DeleteFoo请求在客户端(JavaScript)完成罚款,同时保持请求打开,但我需要在响应中的信息继续,所以它会举办。 所以,原来的问题… 例如: //External library public async Task DeleteFooAsync(); 在我的asp.net mvc代码中,我想以一种即忘即逝的方式调用DeleteFooAsync – 我不想阻止等待DeleteFooAsync完成的响应。 如果由于某种原因,DeleteFooAsync失败(或引发exception),那么用户或程序就不能执行任何操作,所以我只想logging一个错误。 现在,我知道任何exception都会导致不可观察的exception,所以我能想到的最简单的情况是: //In my code Task deleteTask = DeleteFooAsync() //In my App_Start TaskScheduler.UnobservedTaskException += ( sender, e ) => { m_log.Debug( "Unobserved exception! This exception would have been unobserved: {0}", e.Exception […]