Tag: asynchronous

asynchronous与“旧asynchronous委托”

我试图用一种新的语法来取代旧的“即发即忘”电话,希望能够更简单,而且似乎正在逃避我。 这是一个例子 class Program { static void DoIt(string entry) { Console.WriteLine("Message: " + entry); } static async void DoIt2(string entry) { await Task.Yield(); Console.WriteLine("Message2: " + entry); } static void Main(string[] args) { // old way Action<string> async = DoIt; async.BeginInvoke("Test", ar => { async.EndInvoke(ar); ar.AsyncWaitHandle.Close(); }, null); Console.WriteLine("old-way main thread invoker finished"); // new […]

用于处理列表的C#asynchronous选项

我想更好地理解我在C#中使用的asynchronous和并行选项。 在下面的片段中,我列出了我遇到的最多的5种方法。 但是我不确定要select哪一个,或者更好,在select时要考虑什么标准: 方法1:任务 (请参阅http://msdn.microsoft.com/en-us/library/dd321439.aspx ) 调用StartNew在function上等价于使用其中一个构造函数创build一个Task,然后调用Start来计划执行。 但是,除非创build和调度必须分开,否则S​​tartNew是简单性和性能的推荐方法。 TaskFactory的StartNew方法应该是创build和调度计算任务的首选机制,但是对于必须将创build和调度分离的情况,可以使用构造函数,然后可以使用任务的Start方法将任务调度为稍后执行时间。 // using System.Threading.Tasks.Task.Factory void Do_1() { var _List = GetList(); _List.ForEach(i => Task.Factory.StartNew(_ => { DoSomething(i); })); } 方法2:QueueUserWorkItem (请参阅http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx ) 您可以按照系统内存允许的方式排队多个线程池请求。 如果有比线程池线程更多的请求,则附加请求保持排队,直到线程池线程可用。 您可以将排队方法所需的数据放入定义方法的类的实例字段中,也可以使用接受包含必要数据的对象的QueueUserWorkItem(WaitCallback,Object)重载。 // using System.Threading.ThreadPool void Do_2() { var _List = GetList(); var _Action = new WaitCallback((o) => { DoSomething(o); }); _List.ForEach(x => ThreadPool.QueueUserWorkItem(_Action)); […]

Async WebApi Thread.CurrentCulture

我有一个自我托pipe的OWIN托pipe的Web API项目,为我提供了一些基本的REST方法。 我想要多语言的错误消息,所以我使用资源文件和一个BaseController将Thread.CurrentCulture和Thread.CurrentUICulture设置为请求的Accept-Language标头。 public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) { if (controllerContext.Request.Headers.AcceptLanguage != null && controllerContext.Request.Headers.AcceptLanguage.Count > 0) { string language = controllerContext.Request.Headers.AcceptLanguage.First().Value; var culture = CultureInfo.CreateSpecificCulture(language); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; } base.ExecuteAsync(controllerContext, cancellationToken); } 这一切都很好,但问题出现,如果我使我的控制器方法asynchronous 。 当我在方法中使用await时,它可能会在另一个线程中继续,所以CurrentCulture和CurrentUICulture将会丢失。 这是我用来find这个问题的一个小例子。 public async Task<HttpResponseMessage> PostData(MyData data) { Thread currentThread = Thread.CurrentThread; await SomeThing(); if […]

asynchronous编程与线程有什么不同?

我一直在阅读一些async文章: http : //www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45和作者说: 当你在做asynchronous工作时,你并不总是使用一个线程。 例如,当您发出asynchronousWeb服务请求时,ASP.NET将不会在async方法调用和await之间使用任何线程。 所以我想了解的是,如果我们不使用任何线程来执行并发,它将如何变成async ? 这是什么意思“你不总是使用一个线程”? 让我首先解释一下我所知道的有关使用线程的知识(一个简单的例子,当然,除了UI和Worker方法之外,线程可以用于不同的情况) 你有UI线程input输出。 您可以在UI线程中处理事情,但它会使UI无响应。 因此,让我们说我们有一个stream相关的操作,我们需要下载一些数据。 而且我们还允许用户在下载时做其他事情。 我们创build一个新的工作线程,下载文件并更改进度条。 一旦完成,就没有什么可做的,所以线程被杀死了。 我们继续从UI线程。 我们可以根据情况等待UI线程中的工作线程,但在此之前,在下载文件的同时,我们可以使用UI线程做其他事情,然后等待工作线程。 async编程不一样吗? 如果不是,有什么区别? 我读了async编程使用ThreadPool从拉线虽然。

ASP.NET MVC4asynchronous控制器 – 为什么要使用?

我想了解为什么和什么时候应该使用async控制器操作。 最后,当我用它等待,它将等待操作完成,以返回视图。 例如 public async Task<ActionResult> TryMe() { await SomeActionAsync(); return View(); } 在这种情况下,如果我使用async或不使用async ,则Action将执行相同的时间。 如果我不想并行运行至less两个慢速操作(不依赖于对方),我看不到有任何理由使用async控制器操作。 如果我错了,请纠正我。 我想我在这里错过了一些东西。

asynchronousnodejs模块导出

我想知道什么是configuration模块导出的最佳方法。 在下面的例子中,“async.function”可能是一个FS或HTTP请求,为了举例而简化: 以下是示例代码(asynmodule.js): var foo = "bar" async.function(function(response) { foo = "foobar"; // module.exports = foo; // having the export here breaks the app: foo is always undefined. }); // having the export here results in working code, but without the variable being set. module.exports = foo; 只有在执行了asynchronouscallback后,如何才能导出模块? 编辑一个关于我的实际用例的快速logging:我正在编写一个模块来在fs.exists()callback中configurationnconf( https://github.com/flatiron/nconf )(即它将parsing一个configuration文件,设置nconf)。

asynchronous/等待适合IO和CPU绑定的方法吗?

MSDN文档似乎声明async和await适用于IO绑定的任务,而Task.Run应该用于CPU绑定的任务。 我正在执行一个应用程序,执行HTTP请求来检索HTML文档,然后parsing。 我有一个像这样的方法: public async Task<HtmlDocument> LoadPage(Uri address) { using (var httpResponse = await new HttpClient().GetAsync(address)) //IO-bound using (var responseContent = httpResponse.Content) using (var contentStream = await responseContent.ReadAsStreamAsync()) return await Task.Run(() => LoadHtmlDocument(contentStream)); //CPU-bound } 这是好的和适当的使用async和await ,或者我过度使用它?

TaskCompletionSource:何时使用SetResult()与TrySetResult()等

我试图围绕TPL,C#5中新的async / awaitfunction,以及TaskCompletionSource的奥秘。 有一件事情我不清楚的是什么时候使用SetResult , SetException和SetCancel与TrySetResult , TrySetException和TrySetCancel 。 这是MSDN必须说的: 如果任务已处于三种最终状态之一,则此操作将返回false:RanToCompletion,Faulted或Canceled。 如果基础任务已经被处置,这个方法也返回false。 好吧,我明白了,但它并没有真正提供任何指导什么时候或为什么要使用一个。 那么,交易是什么?

为什么IIS线程与常规CLR线程相比如此珍贵?

我正在阅读关于 ASP.NET MVC中的AsyncControllers 。 看起来,它们存在的唯一原因是IIS线程可以被保存,而长时间运行的工作被委托给常规的CLR线程,似乎更便宜。 我在这里有几个问题: 为什么这些IIS线程如此昂贵,无法certificate为支持asynchronous控制器而构build的整个体系结构? 我如何知道/configuration在IIS应用程序池中运行多less个IIS线程?

等待任务内的asynchronous/等待

我在我的main()中创build了这个构造 var tasks = new List<Task>(); var t = Task.Factory.StartNew( async () => { Foo.Fim(); await Foo.DoBar(); }); //DoBar not completed t.Wait(); //Foo.Fim() done, Foo.DoBar should be but isn't 但是,当我.Wait t时,它不会等待DoBar()的调用完成。 我如何才能真正等待?