例 :
try
{
var myTask = Task.Run(async () =>
{
await Task.Delay(1);
});
myTask.ContinueWith(myContinuedTask =>
{
lock (myTask)
{
Task.Delay(1).Wait();
Console.WriteLine(myContinuedTask.Id);
}
});
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
1) myContinuedTask が myTask をロックするときは、(これを) ロックするようなものですよね?
2) インスタンスがこのコードの制御外で使用されている場合、これは良い考えではありません。
3) このインスタンスがこのコードの制御内でのみ使用される場合、myContinuedTask がロックを取得せず、待機状態のままになる可能性はありますか? タスクは TaskScheduler によって管理されることを知っています。そして、これがデッドロックにつながる可能性のあるタスクインスタンスをロックしているかどうかはわかりません?? (もっと情報が必要です)
4) タスクの Id フィールドは一意であるとは限りません。intなので、最大4^32個のタスクが存在できますよね?これは本当に低いようです。プロセスごと、スレッドごと、セッションごとなどですか?
ご協力ありがとうございました :)