2015-02-11 91 views
0

我想在我的C#应用​​程序中使用任务队列作为背景。使用Task.Factory.StartNew执行任务队列

通过阅读网络上的内容,我了解到调用Task.Factory.StartNew会将任务排队在TaskScheduler队列中。

当我这样做时,我得到一个编译器警告,因为我不在等待Task.Factory.StartNew的结果。

但在我的情况下,调用代码对任务的结果不感兴趣。我有处理任务失败的代码,但它不是调用代码的责任。

我想了解的是我的方法是否正确,或者是否存在更合适的“C#方式”执行任务队列。

+0

你可以发布一些示例代码?我对编译器的警告很感兴趣 – 2015-02-11 11:01:12

回答

3

我想在我的C#应用​​程序中使用任务队列作为背景。

虽然这是可能,它几乎不是最好的方法。

取而代之的任务队列中,你可能想要的是要么油门后台任务(允许任何顺序),或操作的队列来执行。

如果你想节流,那么看看SemaphoreSlim

如果您想要一个操作队列,请从TPL Dataflow检出ActionBlock<T>

这两种方法都适用于同步和异步操作,它们都远比编写自己的“任务队列”容易。

+0

非常好的一点,特别是如果有很多这样的后台任务 – Jeb 2015-02-11 11:17:58

+0

阅读“ActionBlock”后,我了解了CLR中的并发性,这是一个巨大的飞跃,非常感谢。 (我来自Java背景)。但我想我也明白,async-await就是这样 - 一个任务队列。感觉非常不同,所以花了我一些时间才意识到它正在做我所需要的。我会坚持,因为它使我的代码非常简单。但我接受你的回答,以便启发其他人。 – daramasala 2015-02-15 08:16:38