相关疑难解决方法(0)

ThreadPool.QueueUserWorkItem与Task.Factory.StartNew

下面有什么区别

ThreadPool.QueueUserWorkItem
Run Code Online (Sandbox Code Playgroud)

VS

Task.Factory.StartNew
Run Code Online (Sandbox Code Playgroud)

如果对于某些长时间运行的任务调用上述代码500次,是否意味着将占用所有线程池线程?

或者TPL(第二选项)是否足够聪明,只能占用少于或等于处理器数量的线程?

c# multithreading threadpool c#-4.0

76
推荐指数
1
解决办法
3万
查看次数

24
推荐指数
2
解决办法
1万
查看次数

同时运行任务.NET 4.5

为什么该方法AwakeTest需要3秒而不是1秒

public static async void AwakeTest()
{
    var Do1 = Sleep(1, 1);
    var Do2 = Sleep(1, 2);
    var Do3 = Sleep(1, 3);

    await System.Threading.Tasks.Task.WhenAll(Do1, Do2, Do3); 

    Console.WriteLine(await Do1);
    Console.WriteLine(await Do2);
    Console.WriteLine(await Do3);
}

private static async System.Threading.Tasks.Task<int> Sleep(int Seconds, int ID)
{
    if (Seconds < 0)
    {
        throw new Exception();
    }
    System.Threading.Thread.Sleep(Seconds * 1000);
    return ID;
}
Run Code Online (Sandbox Code Playgroud)

c# task task-parallel-library async-await

3
推荐指数
1
解决办法
117
查看次数

Task.Factory.StartNew()是否保证至少创建一个新线程?

我知道TPL不一定为并行集中的每个任务创建一个新线程,但是它总是创建至少一个吗?例如:

private void MyFunc()
{
    Task.Factory.StartNew(() =>
    {
        //do something that takes a while   
    });

    DoSomethingTimely();   //is this line guaranteed to be hit immediately?
}
Run Code Online (Sandbox Code Playgroud)

编辑:澄清:是的,我的意思是保证执行的线程MyFunc()不会被用来执行//do something that takes a while.

c# multithreading threadpool task-parallel-library

1
推荐指数
2
解决办法
2280
查看次数