由于我可以使用委托执行异步操作,我怀疑在我的应用程序中使用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;
}
}
答案 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
。