加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:44:10 所属栏目:百科 来源:网络整理
导读:我有“谷歌搜索”但仍然与任务,线程和后台工作者混淆….. “Task是在当前线程上运行的高级API”是否正确? 如果1是正确的,为什么我需要使用invoke来更改同一线程中任务内的UI? Backgroundworker在应用程序中只获得最低优先级?那么backgroundworker的性能低
我有“谷歌搜索”但仍然与任务,线程和后台工作者混淆…..

>“Task是在当前线程上运行的高级API”是否正确?
>如果1是正确的,为什么我需要使用invoke来更改同一线程中任务内的UI?
> Backgroundworker在应用程序中只获得最低优先级?那么backgroundworker的性能低于任务和线程?对 ?
>最后,在我的应用程序中,我需要使用“HttpWebRequest”从服务器获取一个字符串,之后解析字符串并更新UI.
如果我使用“HttpWebRequest.BeginGetResponse”等待异步结果并触发完整事件来更新UI,我需要使用invoke方法来调用UI线程控件,但是我可以使用后台工作器代替吗?我可以简单地在“RunWorkerCompleted”事件中更改UI,有什么不利之处吗?

对不起我的游泳池英语并感谢您的帮助……!

解决方法

1)否,默认情况下,任务在线程池线程上运行.但是,您可以提供另一个可以以不同方式运行任务的调度程序.

3)默认优先级没有差异. BackgroundWorker还在线程池线程上运行.

4)使用TaskFactory.FromAsync是处理异步Web请求的一种相当简单的方法:

Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse,null)
    .ContinueWith(
        t =>
        {
            using (var response = (HttpWebResponse)t.Result)
            {
                // Do your work
            }
        },TaskScheduler.FromCurrentSynchronizationContext()
    );

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读