Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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#/VB.Net任务与线程与BackgroundWorker_C#_Vb.net_Multithreading_Backgroundworker_Task - Fatal编程技术网

C#/VB.Net任务与线程与BackgroundWorker

C#/VB.Net任务与线程与BackgroundWorker,c#,vb.net,multithreading,backgroundworker,task,C#,Vb.net,Multithreading,Backgroundworker,Task,我已经“谷歌搜索”,但仍然与任务、线程和后台工作人员混淆 “任务是在当前线程上运行的高级API”是否正确 如果1是正确的,为什么我需要在同一线程中使用invoke来更改任务内部的UI Backgroundworker在应用程序中仅获得最低优先级?那么backgroundworker的性能低于task和thread?对吧? 最后,在我的应用程序中,我需要使用“HttpWebRequest”从服务器获取一个字符串,然后解析该字符串并更新UI。 如果我使用“HttpWebRequest.BeginGe

我已经“谷歌搜索”,但仍然与任务、线程和后台工作人员混淆

  • “任务是在当前线程上运行的高级API”是否正确

  • 如果1是正确的,为什么我需要在同一线程中使用invoke来更改任务内部的UI

  • Backgroundworker在应用程序中仅获得最低优先级?那么backgroundworker的性能低于task和thread?对吧?

  • 最后,在我的应用程序中,我需要使用“HttpWebRequest”从服务器获取一个字符串,然后解析该字符串并更新UI。 如果我使用“HttpWebRequest.BeginGetResponse”来等待异步结果并触发一个完整的事件来更新UI,我需要使用invoke方法来调用UI线程控件,但是我可以使用后台工作程序而不是?我只需在“RunWorkerCompleted”事件中更改UI,有什么缺点吗

  • 对不起,我的台球英语,谢谢你的帮助

    1)否,任务默认在线程池线程上运行。不过,您可以提供另一个调度程序,它可以以不同的方式运行任务

    3) 默认情况下,优先级没有差异
    BackgroundWorker
    也在线程池线程上运行

    4) 使用是处理异步web请求的一种非常简单的方法:

    Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null)
        .ContinueWith(
            t =>
            {
                using (var response = (HttpWebResponse)t.Result)
                {
                    // Do your work
                }
            },
            TaskScheduler.FromCurrentSynchronizationContext()
        );
    
    Task.Factory.fromsync(request.BeginGetResponse,request.EndGetResponse,null)
    .继续(
    t=>
    {
    使用(var响应=(HttpWebResponse)t.Result)
    {
    //做你的工作
    }
    },
    TaskScheduler.FromCurrentSynchronizationContext()
    );
    

    使用
    TaskScheduler.FromCurrentSynchronizationContext
    确保在当前线程上调用
    ContinueWith
    中的回调。因此,如果任务是在UI线程上创建的,则响应将在后台检索,然后在UI线程上处理。

    任务在后台使用线程池,它们不限于调用它们的当前线程