System.Threading.Tasks ad alanındaki yeni iş parçacıklı yapıları kullanarak iptal edilebilir bir çalışan iş parçacığı uygulamaya çalışıyorum. Şimdiye kadar bu uygulama ile geldi adres:İptal edilebilir çalışan iş parçacığı nasıl uygulanır
public sealed class Scheduler
{
private CancellationTokenSource _cancellationTokenSource;
public System.Threading.Tasks.Task Worker { get; private set; }
public void Start()
{
_cancellationTokenSource = new CancellationTokenSource();
Worker = System.Threading.Tasks.Task.Factory.StartNew(
() => RunTasks(_cancellationTokenSource.Token),
_cancellationTokenSource.Token
);
}
private static void RunTasks(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
Thread.Sleep(1000); // simulate work
}
}
public void Stop()
{
try
{
_cancellationTokenSource.Cancel();
Worker.Wait(_cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
// OperationCanceledException is expected when a Task is cancelled.
}
}
}
Stop()
döner ben TaskStatus.Canceled
olmasını Worker.Status
bekliyoruz zaman.
Birim testlerim, Worker.Status
belirli koşullar altında TaskStatus.Running
olarak ayarlanmış olduğunu göstermiştir.
İptal edilebilir bir çalışan iş parçacığı uygulamak için bu doğru bir yöntem midir? Sadece Cancel()
aradım çünkü, zaten hangi -
Evet, sorunu çözdünüz. Teşekkürler. –