Tag: asynchronous

WCF服务契约接口的不同forms

看来我可以在以下三个不同版本的同一个WCF合同接口API之间自由切换,而不会中断客户端: [ServiceContract] interface IService { // Either synchronous // [OperationContract] // int SomeMethod(int arg); // Or TAP [OperationContract] Task<int> SomeMethodAsync(int arg); // Or APM // [OperationContract(AsyncPattern = true)] // IAsyncResult BeginSomeMethod(int arg, AsyncCallback callback, object state); // int EndSomeMethod(IAsyncResult ar); } 现有的testing客户端应用程序保持工作,无需重新编译或触摸。 如果我重新编译服务并将其引用重新导入到客户端应用程序中,那么WSDL定义将保持不变 ,即1:1。 我的问题: 这是我可以信赖的合法行为吗? 它logging在任何地方吗? 我们的想法是将一组同步SomeMethod风格的方法转换为TAP SomeMethodAsync风格的方法,在其实现中使用async/await ,从而提高WCF服务的可伸缩性,而不会破坏现有的客户端。 另外,在.NET 3.5和.NET 4.0下,WCF服务扩展方面已经出现了一些问题。 他们在MSKB文章“WCF服务可能在负载下缓慢扩展”以及CodeProject文章“调整WCF构build高度可扩展的asynchronousREST API”中有logging […]

ReactJS中this.state和this.setstate的区别是什么?

我想要改变hasSubmit键的值,就像在First Code部分一样。 我知道这不是build议。 但第二个代码是asynchronous的,我不想使用setState的callback函数。 this.state和setState什么区别? 有没有办法改变状态值立即hasSubmit ? 第一个代码: this.state.hasSubmit = false this.setState({}) //Code that will use `hasSubmit`. 第二个代码: this.setState({ hasSubmit: false, }); //Code that will use `hasSubmit`. this.setState({ hasSubmit: false, }); //Code that will use `hasSubmit`. 加: 情况是这样的: hasSubmit在getInitialState()设置为false 。 当我点击submitbutton时, hasSubmit会变成false 。 提交时, hasSubmit将变为true 。 首先点击submit没有问题,并已submit设置为true 。 但是第二次点击submit会错误的使用Second asynchronous code ,因为hasSubmit仍然是true ,而第First Code可以解决问题。

Swiftasynchronous加载图像

我正在从urlasynchronous工作显示图像。 我试图创build一个新的线程下载图像,然后刷新main thread 。 func asyncLoadImg(product:Product,imageView:UIImageView){ let downloadQueue = dispatch_queue_create("com.myApp.processdownload", nil) dispatch_async(downloadQueue){ let data = NSData(contentsOfURL: NSURL(string: product.productImage)!) var image:UIImage? if data != nil{ image = UIImage(data: data!) } dispatch_async(dispatch_get_main_queue()){ imageView.image = image } } } 当我试图debugging,当谈到dispatch_async(downloadQueue),它跳出了func。 任何build议? 谢谢

asynchronous实现IValueConverter

如果我想在一个IValueConverter内部触发asynchronous方法。 有没有更好的等待,然后强制它通过调用结果属性同步? public async Task<object> Convert(object value, Type targetType, object parameter, string language) { StorageFile file = value as StorageFile; if (file != null) { var image = ImageEx.ImageFromFile(file).Result; return image; } else { throw new InvalidOperationException("invalid parameter"); } }

任务sorting和re-entracy

我有以下情况,我认为这可能是相当普遍的: 有一个任务(一个UI命令处理程序)可以完成同步或asynchronous。 命令可能比他们正在处理更快到达。 如果某个命令已经有待处理的任务,那么新的命令处理程序任务应该排队并按顺序处理。 每个新任务的结果可能取决于前一个任务的结果。 取消应该遵守,但为了简单起见,我想把它放在这个问题的范围之外。 此外,线程安全性(并发性)不是必需的,但必须支持重入性。 下面是我想要实现的基本示例(作为控制台应用程序,为了简单起见): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static void Main(string[] args) { var asyncOp = new AsyncOp<int>(); Func<int, Task<int>> handleAsync = async (arg) => { Console.WriteLine("this task arg: " + arg); //await Task.Delay(arg); // make it async return await Task.FromResult(arg); // sync }; Console.WriteLine("Test […]

在WebApi中使用HttpContext.Current是非常危险的,因为是asynchronous的

我的问题是有点相关: WebApi相当于HttpContext.Items与dependency injection 。 我们要使用Ninject在WebApi区域中使用HttpContext.Current注入一个类。 我担心的是,这可能是非常危险的 ,因为在WebApi( 一切? )是asynchronous的。 请纠正我,如果我在这些问题上错了,这是我到目前为止调查: HttpContext.Current通过线程获取当前上下文(我直接查看实现)。 使用HttpContext.Current里面的async Task是不可能的,因为它可以在另一个Thread上运行。 WebApi使用IHttpController和方法Task<HttpResponseMessage> ExecuteAsync =>每个请求都是async =>你不能使用HttpContext.Current里面的action方法。 它甚至可能发生,更多的请求由同一个线程执行。 创build控制器与注入东西到构造函数IHttpControllerActivator与同步方法IHttpController Create 。 这是ninject创buildController的所有依赖项的地方。 如果我在所有这4点中都是正确的,那么在动作方法或下面的任何图层中使用HttpContext.Current是非常危险的,并且会有意想不到的结果。 我看到很多接受的答案,正是这个build议。 恕我直言,这可以工作一段时间,但会在负载下失败。 但是,当使用DI来创build一个控制器和它的依赖关系时,这是正常的,因为它运行在一个单独的线程上。 我可以从构造函数中的HttpContext获得一个值,这将是安全的? 。 我想知道是否每个控制器都是在单个线程上为每个请求创build的,因为这可能会导致在负载很重的情况下可能会消耗来自IIS的所有线程的问题。 只是为了解释为什么我要注入HttpContext的东西: 一个解决scheme是获取控制器操作方法中的请求,并将所有层的所需值作为parameter passing,直到在代码中深处使用。 我们想要的解决scheme:所有的层之间都不受此影响,我们可以在代码深处使用注入的请求(例如,在一些依赖于URL的ConfigurationProvider中) 如果我总是错误的或者我的build议是正确的,请给我你的意见,因为这个主题似乎是非常复杂的。 Thx提前!

何时closuresNodejs中的MongoDB数据库连接

通过Node MongoDB本地驱动程序使用Nodejs和MongoDB。 需要检索一些文件,并进行修改,然后将其保存。 这是一个例子: db.open(function (err, db) { db.collection('foo', function (err, collection) { var cursor = collection.find({}); cursor.each(function (err, doc) { if (doc != null) { doc.newkey = 'foo'; // Make some changes db.save(doc); // Update the document } else { db.close(); // Closing the connection } }); }); }); 具有asynchronous性质,如果更新文档的过程花费更长时间,那么当光标到达文档的末尾时,数据库连接将closures。 并非所有更新都保存到数据库。 如果省略了db.close() ,则所有文档都会正确更新,但应用程序挂起,不会退出。 我看到一个postbuild议使用一个计数器跟踪更新数量,当回落到零,然后closures数据库。 […]

如何在Delphi中以各种方式进行线程处理?

似乎我终于在我的Delphi 2009程序中实现了某种线程化。 如果只有一种方法可以做到,我就可以跑步了。 但是我看到了几种可能性。 任何人都可以解释这些之间有什么区别,为什么我会select另一个。 Delphi中的TThread类 由Andreas Hausladen提供的 AsyncCalls OmniThreadLibrary由Primoz Gabrijelcic(gabr) …任何其他人? 编辑: 我刚刚在2010年3月(第10期)“ 布莱斯·帕斯卡杂志 ”( Blaise Pascal Magazine)的一篇题为“四种创造线索”的文章中,阅读了Gabr的一篇优秀文章。 你必须订阅获得杂志的内容,所以通过版权,我不能在这里再现任何实质性内容。 总之,Gabr描述了使用TThreads,直接Windows API调用,Andy的AsyncCalls和他自己的OmniThreadLibrary之间的区别。 他最后得出结论: “我并不是说你不得不select比传统的delphi方式(TThread)还要多的东西,但是把你的select通知你还是很好的” Mghie的回答非常彻底,build议OmniThreadLibrary可能更可取。 但是我仍然对每个人(或者任何人)应该如何select他们的线程方法感兴趣。 你可以添加到列表中: 。 4.直接调用Windows API 。 5. LachlanG在答复中提出的Misha Charrett的 CSI分布式应用程序框架 。 结论: 我可能会去OmniThreadLibrary。 我喜欢Gabr的工作。 多年前我使用过他的profiler GPProfile,而且我正在使用他的GPStringHash,它实际上是OTL的一部分。 一旦Embarcadero将这个function添加到Delphi中,我唯一的担心就是升级它来处理64位或者Unix / Mac处理。

等待swift循环,asynchronousnetworking请求完成执行

我想要一个for循环发送一堆networking请求到firebase,然后传递数据到一个新的视图控制器,一旦方法完成执行。 这是我的代码: var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)") ref.observeSingleEventOfType(.Value, withBlock: { snapshot in datesArray["\(key.0)"] = snapshot.value }) } //Segue to new view controller here, and pass datesArray once it is complete 我有几个担心。 首先,如何等待for循环完成并且所有networking请求都完成? 我无法修改observeSingleEventOfType函数,它是firebase SDK的一部分。 另外,我会通过尝试访问来自for循环的不同迭代的datesArray来创build某种竞争条件(希望是有道理的)? 我一直在阅读关于GCD和NSOperation,但我有点失落,因为这是我build立的第一个应用程序。 注意:Locations数组是包含我需要在Firebase中访问的键的数组。 此外,networking请求asynchronous触发也很重要。 我只想等到所有的asynchronous请求完成,然后再将datesArray传递给下一个视图控制器。

浏览器取消请求时出现ASP.NET Web API OperationCanceledException

当用户加载一个页面时,会发出一个或多个ajax请求,这些请求会触发ASP.NET Web API 2控制器。 如果用户导航到另一个页面,在这些Ajax请求完成之前,请求被浏览器取消。 我们的ELMAH HttpModule会为每个取消的请求logging两个错误: 错误1: System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() — End of stack trace from previous […]