2

C# の async await 機能は、MonoTouch 6.0 ではまだ利用できません。それまでは、MonoTouch で非同期タスクを実装する最良の方法は何ですか。

MonoTouch のドキュメントでは、応答性の高い UI を作成するために System.Threading 名前空間から Threading を使用することを推奨しています。しかし、バックグラウンド ワーカー スレッドが実行されると、時間がかかる場合はどうすればキャンセルできますか? 60 秒のタイマーを実装し、タイマー イベントが発生したときにスレッドを強制終了する必要がありますか?

より良いオプションはありますか?

どんな助けでも大歓迎です

ありがとう

4

2 に答える 2

3

スレッドの使用は適切なオプションです。ただし、スレッドを外部から直接終了 (アボート) しないことをお勧めします。代わりに、スレッドで実行されるコードは定期的にフラグをチェックし、フラグが true に設定されている場合は早期に戻る必要があります。

MSDN には優れたウォークスルーとサンプルがあります。

方法: スレッドを作成および終了する

于 2012-12-14T01:31:25.737 に答える
2

この時点で、Mono が CLR をどれだけ持っているかはわかりませんが、バックグラウンド タスクについては、最も推奨されるリストを次に示します (ランキングの詳細については、私のブログを参照してください)

  1. Task
  2. BackgroundWorker
  3. Delegate.BeginInvoke
  4. ThreadPool.QueueUserWorkItem
  5. Thread

「キャンセルフラグ」については、次のいずれかをお勧めします。

  1. CancellationToken- ゴールドスタンダード。利用可能な場合はこれを使用します。
  2. ManualResetEvent
  3. volatile bool

キャンセルは本来協調的なものなので、キャンセルする側がキャンセル通知を送信し、受信側は定期的に確認する必要があります。

于 2012-12-14T02:11:06.997 に答える