Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 作为做Asyn任务的代表,我还需要系统线程吗?_C#_Multithreading_Delegates - Fatal编程技术网

C# 作为做Asyn任务的代表,我还需要系统线程吗?

C# 作为做Asyn任务的代表,我还需要系统线程吗?,c#,multithreading,delegates,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(2

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

}
}
我还需要系统线程吗


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

我们不断改进处理并发性的抽象,因此通常不需要更低级的构造

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


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

异步委托在上运行,如详细所述。我不得不使用显式线程的一种情况是在后台运行UI任务,因为线程池线程都是多线程单元,UI任务只能在单线程单元中运行。上面的链接还提供了一些不适合使用线程池的情况


尽管大多数短期的后台任务都应该使用线程池或异步委托来完成,但仍然存在需要创建显式线程的情况。系统。线程不会很快消失。

该公司的做法是正确的。他的回答暗示线程池线程是一种有限的资源。对您来说,一个很好的练习是编写一个小程序包,模拟非线程池线程上的Begin/EndInvoke功能。您可以实现IAsyncResult、泛型方法、回调和其他功能来完善这个包?我对这里的一些回答感到困惑