在MonoTouch中实现可取消后台任务的最佳方法是什么?

时间:2012-12-14 01:13:22

标签: multithreading xamarin.ios

MonoTouch 6.0中尚未提供C#异步等待功能。在那之前,在MonoTouch中实现异步任务的最佳方法是什么。

MonoTouch文档建议从System.Threading命名空间进行线程化以创建响应式UI。但是一旦后台工作线程正在进行,如果需要很长时间我如何取消它呢?我是否需要实现一个60秒的计时器并在计时器事件触发时终止线程?

有更好的选择吗?

任何帮助高度赞赏

由于

2 个答案:

答案 0 :(得分:3)

使用线程是一个不错的选择。但是,最好不要直接从外部终止(中止)线程。相反,在线程中运行的代码应定期检查标志,如果标志为true,则它应该提前返回。

MSDN上有一个很棒的演练和示例:

How to: Create and Terminate Threads

答案 1 :(得分:2)

我不确定Mono目前有多少CLR,但对于后台任务,这是我的列表,most-recommended first (full details on the rankings can be found on my blog)

  1. Task
  2. BackgroundWorker
  3. Delegate.BeginInvoke
  4. ThreadPool.QueueUserWorkItem
  5. Thread
  6. 对于“取消标志”,我建议其中一个:

    1. CancellationToken - 黄金标准。如果可用,请使用此选项。
    2. ManualResetEvent
    3. volatile bool
    4. 取消本质上是合作的,因此取消方发送取消通知,接收方必须定期检查。