89得票5回答
在C#中并行运行三个方法的最简单方法

我有三种方法来进行一些数字处理,这些方法如下:results.LeftFront.CalcAi(); results.RightFront.CalcAi(); results.RearSuspension.CalcAi(geom, vehDef.Geometry.LTa.TaStiff...

88得票7回答
使用prevTask.Wait()和ContinueWith(来自Tasks库)一起使用是否推荐?

最近有人告诉我,我使用 .ContinueWith 处理 Tasks 的方式不正确。但我在互联网上找不到相关的证明,因此想向大家请教一下。以下是我使用 .ContinueWith 的示例:public Task DoSomething() { return Task.Factory.S...

86得票6回答
如何防止任务中的同步继续?

我有一些库(socket networking)代码,为请求的待处理响应提供了基于TaskCompletionSource<T>的基于任务的API。然而,在TPL中存在一个烦恼,即似乎无法防止同步延续。我希望能够: 告诉TaskCompletionSource<T>...

85得票4回答
何时使用TaskCreationOptions.LongRunning?

我一直想知道这个问题的答案,但从未真正找到过。 我知道这是任务计划程序在哪个任务上运行的提示,并且任务计划程序可以(或现在会?)为该任务实例化一个非线程池线程。 我不知道的是(令人惊讶的是,在互联网上找不到),何时将任务指定为长时间运行的“经验法则”。 是一秒钟吗? 30秒? 一分钟? ...

84得票2回答
ThreadPool.QueueUserWorkItem与Task.Factory.StartNew的区别

以下两者之间有何区别ThreadPool.QueueUserWorkItem 对比Task.Factory.StartNew 如果上述代码为某个长时间运行的任务调用了500次,这意味着所有线程池线程都会被占用吗? 还是TPL(第二个选项)会聪明地只占用小于或等于处理器数的线程?

84得票2回答
任务并行库替代BackgroundWorker?

任务并行库中是否有任何可替代或改进BackgroundWorker类的内容? 我有一个带向导式UI的WinForms应用程序,它执行一些长时间运行的任务。我想要一个可以响应的UI,具有标准进度条和取消操作的能力。我以前使用过BackgroundWorker来实现这一点,但我想知道是否有一些可...

83得票6回答
我应该使用线程池还是任务并行库来处理IO密集型操作?

在我的一个项目中,它有点像一个聚合器,我从网络中解析提要、播客等内容。如果我采用顺序处理的方式,考虑到资源数量庞大,处理所有内容需要相当长的时间(因为网络问题和类似的事情)。 foreach(feed in feeds) { read_from_web(feed) parse(f...

83得票2回答
如何创建一个运行STA线程的任务(TPL)?

使用线程非常简单 Thread thread = new Thread(MethodWhichRequiresSTA); thread.SetApartmentState(ApartmentState.STA); 如何在WPF应用程序中使用Tasks实现相同的功能?下面是一些代码:Tas...

80得票3回答
使用Task.Run获取返回值

我有以下代码:public static async Task<string> Start(IProgress<ProcessTaskAsyncExProgress> progress) { const int total = 10; for (var ...

79得票5回答
多个await和Task.WaitAll - 是否等价?

就性能而言,这两种方法会同时运行GetAllWidgets()和GetAllFoos()吗? 选择一种方法比另一种更有理由吗?编译器在幕后进行了很多操作,所以我不是很清楚。 ============= 方法A:使用多个awaits ======================public ...