C# - 由于代理执行异步任务仍然需要System.Threading吗?

时间:2009-09-23 09:27:07

标签: c# multithreading delegates

由于我可以使用委托执行异步操作,我怀疑在我的应用程序中使用System.Threading的机会很小。是否有任何基本情况我无法避免System.Threading?

(我正在学习阶段)。

示例:

class Program

{

public delegate int Total (int a,int b);

static void Main()

{

  Total tl = new Total(SumUp);
  IAsyncResult isany=tl.BeginInvoke(20,20, null, null);

    while (!isany.IsCompleted)
    {
        Console.WriteLine("Busy with other work");
    }

    int ans = tl.EndInvoke(isany);

    Console.WriteLine("Result ={0}", ans);

}

static int SumUp(int a,int b)

{
    a = a * a;

    b = b * b;

    return a + b;

}
}

3 个答案:

答案 0 :(得分:8)

我们不断得到越来越好的抽象处理并发性,因此通常不需要更低层次的构造。

您已经找到了这种更高级抽象的一个示例,.NET 4.0将为我们提供一些处理并发代码的新的非常强大的方法,例如任务和延续。

随着时间的推移,您应该能够在越来越高的抽象层次上处理并发问题。在我看来,这些抽象是否存在于System.Threading中是不太重要的。

答案 1 :(得分:2)

异步代理在thread pool上运行,详见here。我必须使用显式线程的一种情况是在后台运行UI任务,因为线程池线程都是多线程单元,UI任务只能在单线程单元中运行。上面的链接还提供了一些不适合使用线程池的情况。

虽然大多数短期后台任务应该使用线程池或异步委托来完成,但仍然会出现需要创建显式线程的情况。 System.Threading不会很快消失。

答案 2 :(得分:-1)

  

我仍然需要System.Threading

“需要”是什么意思? System.threading的类型在始终加载的mscorlib程序集中定义。如果您想在代码中避免使用完全限定名称,则只需要说using System.Threading