【问题标题】:ThreadPool.QueueUserWorkItem() not available on PCL for MVVMCross 3.2.1ThreadPool.QueueUserWorkItem() 在 MVVMCross 3.2.1 的 PCL 上不可用
【发布时间】:2014-11-15 20:56:37
【问题描述】:

我正在创建一个 MVVMcross Xamarin 应用程序,我正在尝试旋转一个线程以从 dabate 中获取结果并在它回调时更新列表。我在使用 Win 8 和 iOS 之前做过这种事情,但似乎 System.Threading.ThreadPool 在我使用的配置文件中不可用。 (配置文件 259 或 79 不记得我使用的是哪一个,但它适用于 MVVMCross 3.2.1)

ThreadPool.QueueUserWorkItem(CallBack, DoStuff);

我是否在这里忘记了什么,或者这不再是它的完成方式了。

【问题讨论】:

    标签: android ios xamarin mvvmcross portable-class-library


    【解决方案1】:

    ThreadPool.QueueUserWorkItem 的替换是Task.Run

    Task result = Task.Run(() => DoStuff());
    

    更新

    请注意Task.RunTask.Factory.StartNew 的行为不同。请参阅 Stephen Toub 关于此主题的精彩 blog post

    【讨论】:

    • 我发现的替代方法是 TaskFactory.StartNew() 是相同的还是只是一种更复杂的方法?
    • 在这种情况下,我也经常使用async 方法——例如只是调用 async 方法而不在其结果上使用 await。这适用于主要受网络 IO 限制的“后台工作”,但如果“后台工作”的计算量更大,则不起作用。
    • 太棒了。感谢您的快速而有帮助的回复。
    • 请注意,将方法标记为async 不会神奇地导致工作发生在工作线程上。它只使编译器允许返回值而不是任务。实现仍然负责安排工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2013-05-31
    • 2013-07-13
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多