Arka planda yürütmek istediğim birkaç eylem var, ancak birbiri ardına senkronize olarak yürütülmesi gerekiyor.Task.ContinueWith kullanarak bir yürütme kuyruğu oluşturma?
Bunu başarmak için Task.ContinueWith yöntemini kullanmak iyi bir fikir olup olmadığını merak ediyordum. Bununla ilgili herhangi bir sorun var mı? (Karşılık gelen görev zaten tamamlandıysa TPL derhal devamı planlamak gerçeğini kullanarak) tasarlandığı gibi bu çalışması gerekir
private object syncRoot =new object();
private Task latestTask;
public void EnqueueAction(System.Action action)
{
lock (syncRoot)
{
if (latestTask == null)
latestTask = Task.Factory.StartNew(action);
else
latestTask = latestTask.ContinueWith(tsk => action());
}
}
ConcurrentQueue etrafında BlockingCollection kullanmak bir iyileştirme olacaktır. Daha sonra, bir engelleme koleksiyonu üzerinde sadece bir foreach kullanan bir Görev/İşçi ipi gönderilebilir. Yeni bir öğe sıraya ekleninceye veya forma engelleyen koleksiyonda CompleteAdding() çağrılana kadar foreach "askıda kalacak". –