私たちのアプリでは、1つの長い(ish)操作、Calculate
が完了するまでに約5秒かかります。 This postは私がやっていることと基本的に同じですが、完了したスレッドだけを考慮します。 Calculate
を起動するものは、実行中のcalcをすべて終了してから再起動する必要があります。 はthis oneのような投稿に基づいてと表示され、ThreadPool
はこれを解決できるが、これらの1回限りのケースでは適切な解決策ではない可能性があります。操作を再開するために、途中でスレッドを殺す適切な方法はありますか?
私の質問は、それがまだ進行中なら「古いもの」を適切に処分する方法です。私は現在、このが動作するを思わ...
If CalcThread IsNot Nothing Then
CalcThread.Abort()
CalcThread = Nothing
End If
If CalcThread Is Nothing Then 'one assumes this will always be true
CalcThread = New Threading.Thread(AddressOf InternalCalculate)
CalcThread.IsBackground = True
End If
CalcThread.Start()
をしていますが、これは正しいソリューションですか?
更新:私のユースケースは、これらのスレッドの唯一の1があることがあり、そして、クリスは下記の注意事項として、中止はすぐにそれをしないかもしれないが、私はの根性を越えSyncLockを使用する必要があることを考えますCalculate
?
Thread.Abortの邪悪な記事があります。https://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation – FloatingKiwi
私はその記事を読んだことがありますが、それは考慮されていません共有されたデータなどが公開されていないためです。私の本当の疑問は、「ただ、スレッドをNothingに設定して移動できますか? –