Task.StartNew
メソッドを使用するときにスレッドの名前を指定する方法はありますか?
var task = Task.Factory.StartNew(MyAction, TaskCreationOption.LongRunning, ??ThreadName??);
確かにスレッド名ではありません。
スレッドとタスクは1対1の関係ではありません。
Task.Idを使用して追跡できます。
まあ、これはうまくいきます:
class Program {
static void Main(string[] args) {
var task = Task.Factory.StartNew(() => {
Thread.CurrentThread.Name = "foo";
Thread.Sleep(10000); // Use Debug + Break to see it
});
task.Wait();
}
}
ただし、問題がありますが、スレッドプールスレッドはリサイクルされ、名前は変更されません。これは混乱を招く可能性があり、後でまったく異なるコードを実行して実行されることがわかります。これに注意してください。それ以外の場合の最善の策は、[デバッグ+ウィンドウ+スレッド]ウィンドウの[場所]列を使用して、タスクを見つけることです。
私はThread.CurrentThread.ManagedThreadIdを使用することを好みます。名前ほど良くはありませんが、スレッドの特定の作業を追跡するのに役立ちます。
タスクはスレッドプールを使用し、スレッドに名前を付けることができるのは1回だけです。できることは、ThreadStatic変数を使用することです。ただし、タスク間で有効になるため、すべてのタスクで再度設定してください。