草庐IT

task-parallel-library

全部标签

c# - Web Api——即发即弃

我有一个WebAPI的操作,我需要在其中运行一些任务并忘记这个任务。这就是我的方法现在的组织方式:publicasyncTaskDoSth(){awaitTask.Run(...);.....//Dosomeotherwork}问题是,它显然在等待线停止,等待完成后才继续工作。我需要“解雇后忘记”我应该只调用Task.Run()而没有任何异步等待吗? 最佳答案 AndIneedto"fireandforget"我有一篇博文详细介绍了fire-and-forgetonASP.NET的几种不同方法。.总而言之:首先,尽量不要做到“即发即

c# - StaTaskScheduler和STA线程消息泵送

TL;DR:StaTaskScheduler运行的任务内的死锁。长版:我正在使用ParallelTeam的StaTaskScheduler中的ParallelExtensionsExtras托管第三方提供的一些旧版STACOM对象。StaTaskScheduler实现细节的描述如下:ThegoodnewsisthatTPL’simplementationisabletorunoneitherMTAorSTAthreads,andtakesintoaccountrelevantdifferencesaroundunderlyingAPIslikeWaitHandle.WaitAll(wh

c# - StaTaskScheduler和STA线程消息泵送

TL;DR:StaTaskScheduler运行的任务内的死锁。长版:我正在使用ParallelTeam的StaTaskScheduler中的ParallelExtensionsExtras托管第三方提供的一些旧版STACOM对象。StaTaskScheduler实现细节的描述如下:ThegoodnewsisthatTPL’simplementationisabletorunoneitherMTAorSTAthreads,andtakesintoaccountrelevantdifferencesaroundunderlyingAPIslikeWaitHandle.WaitAll(wh

c# - 使用 Task.StartNew 时指定线程的名称

有没有办法在使用Task.StartNew方法时指定线程的名称vartask=Task.Factory.StartNew(MyAction,TaskCreationOption.LongRunning,??ThreadName??); 最佳答案 好吧,这行得通:classProgram{staticvoidMain(string[]args){vartask=Task.Factory.StartNew(()=>{Thread.CurrentThread.Name="foo";Thread.Sleep(10000);//UseDebu

c# - 使用 Task.StartNew 时指定线程的名称

有没有办法在使用Task.StartNew方法时指定线程的名称vartask=Task.Factory.StartNew(MyAction,TaskCreationOption.LongRunning,??ThreadName??); 最佳答案 好吧,这行得通:classProgram{staticvoidMain(string[]args){vartask=Task.Factory.StartNew(()=>{Thread.CurrentThread.Name="foo";Thread.Sleep(10000);//UseDebu

c# - 在没有等待的情况下使用异步?

考虑Usingasyncwithoutawait.thinkthatmaybeyoumisunderstandwhatasyncdoes.Thewarningisexactlyright:ifyoumarkyourmethodasyncbutdon'tuseawaitanywhere,thenyourmethodwon'tbeasynchronous.Ifyoucallit,allthecodeinsidethemethodwillexecutesynchronously.我想写一个应该异步运行但不需要使用await的方法。例如,当使用线程时publicasyncTaskPushCal

c# - 在没有等待的情况下使用异步?

考虑Usingasyncwithoutawait.thinkthatmaybeyoumisunderstandwhatasyncdoes.Thewarningisexactlyright:ifyoumarkyourmethodasyncbutdon'tuseawaitanywhere,thenyourmethodwon'tbeasynchronous.Ifyoucallit,allthecodeinsidethemethodwillexecutesynchronously.我想写一个应该异步运行但不需要使用await的方法。例如,当使用线程时publicasyncTaskPushCal

WPF跨线程访问UI对象之Dispatcher的用法(含Task)

WPF程序员处理多线程的一个方式-Dispatcher当我们打开一个WPF应用程序即开启了一个进程,该进程中至少包含两个线程。一个线程用于处理呈现:隐藏在后台运行一个线程用于管理用户界面:接收输入、处理事件、绘制屏幕以及运行应用程序代码。即UI线程。在UI线程中有一个Dispatcher对象,管理每一个需要执行的工作项。Dispatcher会根据每个工作项的优先级排队。向Dispatcher列队中添加工作项时可指定10个不同的级别。那么问题来了,如果遇到耗时操作的时候,该操作如果依旧发生在UI线程中,Dispatcher列队中其他的需要执行的工作项都要等待,从而造成界面假死的现象。为了加快响应

c# - Task.WhenAll 结果排序

我从here了解到Task.Whenall的任务执行顺序不是确定性的,但我找不到有关结果顺序的任何信息。结果集合是否会按照输入中任务的排序顺序包含结果,或者结果可以按任何顺序包含?从我所做的测试来看,它似乎保留了订单,但我需要确认。 最佳答案 来自MSDN:Task.WhenAll(IEnumerable>)这是四个重载中唯一包含此语句的重载:Ifnoneofthetasksfaultedandnoneofthetaskswerecanceled,theresultingtaskwillendintheRanToCompletion

c# - Task.WhenAll 结果排序

我从here了解到Task.Whenall的任务执行顺序不是确定性的,但我找不到有关结果顺序的任何信息。结果集合是否会按照输入中任务的排序顺序包含结果,或者结果可以按任何顺序包含?从我所做的测试来看,它似乎保留了订单,但我需要确认。 最佳答案 来自MSDN:Task.WhenAll(IEnumerable>)这是四个重载中唯一包含此语句的重载:Ifnoneofthetasksfaultedandnoneofthetaskswerecanceled,theresultingtaskwillendintheRanToCompletion