创建新任务有多贵?

时间:2012-05-29 00:07:56

标签: c#-4.0 asynchronous task-parallel-library

我正在进行一些异步数据获取,我需要在几次数据库调用中执行此操作。所有这些任务都需要以预定义的顺序执行,为此我正在使用协同程序和任务。

GetItemsA(); // wrapped in new Task
GetItemsB(); // wrapped in new Task
GetItemsC(); // wrapped in new Task

目前,我正在为每个调用创建一个新任务。这是一个不好的做法,我应该尽量避免这种情况,并将所有的cals包装在一个任务中吗?

GetItems(); // wrap in single Task

void GetItems()
{
    GetItemsA();
    GetItemsB();
    GetItemsC();
}

2 个答案:

答案 0 :(得分:2)

好的做法通常是忽略开销并专注于代码的可读性。只有当您发现某些代码是应用程序的瓶颈时,才尝试对其进行优化。

创建新Task的开销很可能是微不足道的,特别是与数据库往返相比时。

答案 1 :(得分:0)

一切都会产生开销。您的决定取决于您是否希望所有三个在另一个线程上异步或同步执行。启动另一个线程允许它在不锁定线程的情况下运行。


GetItemsA(); // wrapped in new Task
GetItemsB(); // wrapped in new Task
GetItemsC(); // wrapped in new Task

这将同时执行所有3


GetItems(); // wrap in single Task

void GetItems()
{
    GetItemsA();
    GetItemsB();
    GetItemsC();
}

这将按顺序执行所有3而不锁定主线程(GUI)