Tag: asynchronous

一个干净,轻量级的替代Python的扭曲?

(很久以前)我写了一个multithreading的web-spider来同时启用并发请求。 那是在我的Python青年时代,在我知道GIL以及它为multithreading代码(IE,大多数时候东西刚刚结束了序列化! 我想重写这个代码,使其更强大,性能更好。 基本上有两种方法可以做到这一点:我可以在2.6+中使用新的多处理模块 ,或者我可以使用某种基于反应器/事件的模型。 我宁愿做后来的事,因为它简单得多,也不太容易出错。 所以这个问题涉及到哪个框架最适合我的需求。 以下是我所知道的选项列表: 扭曲 :Python反应器框架的爷爷:看起来很复杂,有点臃肿。 陡峭的学习曲线为一个小任务。 Eventlet :来自lindenlab的家伙。 基于Greenlet的框架,面向这些types的任务。 我看了一下代码,它不太漂亮:非pep8兼容,分散打印(为什么人们在一个框架中做这个?),API似乎有点不一致。 PyEv :不成熟,现在似乎没有人使用它,虽然它是基于libevent,所以它有一个坚实的后端。 asyncore :从stdlib:über低级,看起来像是很多legwork只涉及到一些东西。 龙卷风 :虽然这是一个面向服务器的产品devise服务器dynamic网站,它具有asynchronousHTTP客户端和一个简单的ioloopfunction 。 看起来它可以完成工作,但不是它的目标。 不幸的是,在Windows上不能运行,这对我来说很重要 – 这是我支持这个蹩脚平台的要求] 有什么我错过了吗? 当然,必须有一个图书馆,适合一个简化的asynchronousnetworking库的甜点! 非常感谢intgr指向这个页面的指针。 如果你滚动到底部,你会看到有一个非常好的项目列表,旨在以这样或那样的方式来解决这个任务。 事实上,自从Twisted诞生以来事情确实已经发生了变化:现在人们似乎喜欢基于协同程序的解决scheme,而不是传统的反应器/callback定向解决scheme。 这种方法的好处是更直接的代码:我以前肯定发现,特别是在C ++中使用boost.asio时,基于callback的代码可能会导致难以遵循的devise,并且相对比较模糊未经训练的眼睛。 使用协同例程可以让你编写至less看起来更加同步的代码。 我想现在我的任务是弄清楚我喜欢这些图书馆中的哪一个,然后放弃它! 很高兴我现在问…] 任何关注这个问题的人或许会对此感兴趣,或者在任何意义上关心这个话题:我发现了一个关于这个工作可用工具当前状态的非常好的写法]

如果我的界面必须返回任务什么是最好的方式有一个无操作的实现?

在下面的代码中,由于接口, LazyBar类必须从它的方法中返回一个任务(并且为了参数而不能改变)。 如果LazyBar的实现是不寻常的,它发生在快速和同步运行 – 从方法返回一个无操作任务的最好方法是什么? 我已经用了下面的Task.Delay(0) ,但是我想知道这是否有任何性能的副作用,如果函数被称为很多 (为了参数,每秒数百次): 这个语法糖是不是有点大? 它是否开始堵塞我的应用程序的线程池? 编译器切割器是否足以以不同的方式处理Delay(0) ? 将return Task.Run(() => { }); 有什么不同? 有没有更好的办法? using System.Threading.Tasks; namespace MyAsyncTest { internal interface IFooFace { Task WillBeLongRunningAsyncInTheMajorityOfImplementations(); } /// <summary> /// An implementation, that unlike most cases, will not have a long-running /// operation in 'WillBeLongRunningAsyncInTheMajorityOfImplementations' /// </summary> internal class LazyBar : […]

asynchronous/等待 – 什么时候返回一个任务与无效?

在什么情况下会想要使用 public async Task AsyncMethod(int num) 代替 public async void AsyncMethod(int num) 我能想到的唯一情况是如果你需要任务来跟踪它的进度。 另外,在下面的方法中,async和await关键字是不必要的? public static async void AsyncMethod2(int num) { await Task.Factory.StartNew(() => Thread.Sleep(num)); }

T-SQL中的睡眠命令?

有没有办法写一个T-SQL命令,让它睡一段时间? 我正在asynchronous编写Web服务,我希望能够运行一些testing来查看asynchronous模式是否真的能够使其更具可伸缩性。 为了“模拟”一个很慢的外部服务,我希望能够用一个运行速度很慢的脚本调用一个SQL服务器,但实际上并没有处理大量的东西。

等待多个asynchronous调用完成后再继续

所以,我有一个页面加载并通过jquery.get做出几个请求来填充下拉列表的值。 $(function() { LoadCategories($('#Category')); LoadPositions($('#Position')); LoadDepartments($('#Department')); LoadContact(); }; 然后调用LoadContact(); 哪一个做了另一个调用,当它返回时,它填充表单上的所有字段。 问题是,往往下拉不是全部填充,因此,它不能将它们设置为正确的值。 我需要做的是以某种方式使LoadContact只在其他方法完成且callback完成后才执行。 但是,我不希望在调用LoadContact()之前把一堆标志放在下拉群体callback的最后,然后我再检查,并且必须有一个recursionsetTimeout调用检查。 jQuery中有什么让我说:“当所有这些都完成后执行这个。”? 更多信息我正在思考这方面的事情 $().executeAfter( function () { // When these are done LoadCategories($('#Category')); LoadPositions($('#Position')); LoadDepartments($('#Department')); }, LoadContact // Do this ); …需要跟踪方法执行过程中发生的ajax调用,当它们全部完成时,调用LoadContact; 如果我知道如何拦截正在使用该function的Ajax,我可以写一个jQuery扩展来完成这个function。 我的解决scheme ;(function($) { $.fn.executeAfter = function(methods, callback) { var stack = []; var trackAjaxSend = function(event, XMLHttpRequest, ajaxOptions) { var […]

为什么我应该更喜欢单个“等待Task.WhenAll”多个等待?

如果我不关心任务完成的顺序,只需要它们全部完成,我还应该使用await Task.WhenAll而不是多个await ? 例如DoWord2是DoWord2的首选方法(为什么?): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static async Task<string> DoTaskAsync(string name, int timeout) { var start = DateTime.Now; Console.WriteLine("Enter {0}, {1}", name, timeout); await Task.Delay(timeout); Console.WriteLine("Exit {0}, {1}", name, (DateTime.Now – start).TotalMilliseconds); return name; } static async Task DoWork1() { var t1 = DoTaskAsync("t1.1", 3000); var t2 […]

Objective-C与Cookie的asynchronousWeb请求

我在Objective-C中编写一个程序,我需要向web服务器发出web请求,但是asynchronous地,我在mac上是相当新的,我非常擅长windows技术,但是我需要知道如果我使用NSOperation在10.5中,我假设它不会在10.4 MAC中运行?),或者如果它被实现为使用在10.4上可用的系统线程, 或者我应该创build一个新的线程,并创build一个新的runloop,也如何使用cookie等,如果任何人都可以给我一个小例子,这将是很大的帮助。 如果可能的话,我也希望这个示例在mac 10.4上运行。

新的C#5.0“asynchronous”和“等待”关键字使用多个核心吗?

添加到C#5.0语言中的两个新关键字是asynchronous和等待的 ,这两个关键字可以asynchronous运行C#方法,而不会阻塞调用线程。 我的问题是,这些方法是否真的利用了多个内核并行运行,或者async方法在调用者的同一个线程核心中运行?

我怎样才能防止任务同步延续?

我有一些库(套接字networking)代码,基于TaskCompletionSource<T>提供了一个基于Task的API来处理对请求的响应。 然而,TPL的一个烦恼是,似乎不可能防止同步延续。 我希望能够做的是: 告诉一个TaskCompletionSource<T> ,它不应该允许调用者使用TaskContinuationOptions.ExecuteSynchronously来附加 设置结果( SetResult / TrySetResult )的方式,指定应忽略TaskContinuationOptions.ExecuteSynchronously ,使用池而不是 具体来说,我遇到的问题是传入的数据正在由专门的阅读器处理,如果调用者可以附加TaskContinuationOptions.ExecuteSynchronously他们可以停止阅读器(这不仅影响他们)。 以前,我曾经通过一些骇客来解决这个问题,它检测是否存在任何延续,如果是,则将完成推送到ThreadPool ,但是如果调用者已经饱和他们的工作队列,则会产生显着的影响,因为完成不会得到及时处理。 如果他们使用Task.Wait() (或类似的),他们将基本上自己死锁。 同样,这就是为什么读者是在一个专门的线程,而不是使用工人。 所以; 在我尝试唠叨TPL团队之前,我是否错过了一个选项? 关键点: 我不希望外部呼叫者能够劫持我的线程 我不能使用ThreadPool作为实现,因为它需要在池饱和时工作 下面的例子产生输出(sorting可能因时间而异): Continuation on: Main thread Press [return] Continuation on: Thread pool 问题是一个随机的调用者设法在“主线程”上得到延续。 在真实的代码中,这会中断初级读者; 坏事! 码: using System; using System.Threading; using System.Threading.Tasks; static class Program { static void Identify() { var thread = Thread.CurrentThread; […]

使用MVC5asynchronous的优势是什么?

有什么区别: 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); } 和: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = await IdentityManager.Authentication.CheckPasswordAndSignInAsync(AuthenticationManager, model.UserName, model.Password, model.RememberMe); […]