首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用(异步的) Task.Run替换(异步的) BackgroundWorker?

如何用(异步的) Task.Run替换(异步的) BackgroundWorker?
EN

Stack Overflow用户
提问于 2015-01-27 06:34:08
回答 2查看 1.3K关注 0票数 0

我已经asked a question了如何知道当另一方库代码的字符串在我的代码中发生变化时。我可以随时访问字符串本身。但是不能实现INotifyPropertyChanged,因为它不是我的代码。

我被提供使用BackgroundWorker,这个解决方案确实对我有效!但是,我试图确保它是最好的解决方案,并得到了关于第三方物流的建议,进一步的研究表明,第三方物流的Task.Run可能是更好的解决方案,例如:Task parallel library replacement for BackgroundWorker?,但我不能用代码实现它。

我正在尝试用Task.Run替换这段代码(感谢@a.azemia)。

代码语言:javascript
复制
        BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += (s, e) =>
        {
            while (true)
            {
                if (!fc.SecondString.Equals(AnotherPartyLibrary.firstString))
                {
                    fc.SecondString = AnotherPartyLibrary.firstString;
                }
                Thread.Sleep(1000);
            }
        };
    bw.RunWorkerAsync();

我找不到任何适合我的场景的示例,并试图从其他示例中学习,但没有成功。我需要在任务中使用一个while循环,它需要像BackgroundWorker一样运行asynchronously。在任务中找不到任何包含while循环的示例,所以我不确定如何实现。

我还读到Lambda表达式使用了更多的资源,并且在我见过的一些测试中显示了这一点,所以如果可能的话,我会尽量避免使用Lambda。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2015-01-27 07:03:54

试试这个(未测试):

代码语言:javascript
复制
public async Task DoWork()
{
   while (true)
  {
      if (!fc.SecondString.Equals(AnotherPartyLibrary.firstString))
      {
         fc.SecondString = AnotherPartyLibrary.firstString;
      }

       await Task.Delay(1000);
  }    
}     

我使用了Task.Delay而不是Thread.Sleep,因为前者在延迟发生时不会阻塞线程。您可以使用await调用此函数

代码语言:javascript
复制
 await DoWork();
票数 2
EN

Stack Overflow用户

发布于 2015-01-27 07:34:47

我仍然看不到真正的好处,但你可以这样做:

代码语言:javascript
复制
    private Task T;

    private void Form1_Load(object sender, EventArgs e)
    {

        // ... make sure your string stuff is setup first ...

        T = Task.Run(delegate() { 
            while (true)
            {
                // ... code ...
                System.Threading.Thread.Sleep(1000);
            }
        });
    }    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28159990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档