13 NİSAN 2012, Cuma
Nasıl bekliyor bir Görevi iptal etmek için?
Bu Windows 8 WinRT görevleri oynuyorum ve bir görev aşağıdaki yöntemi kullanarak iptal etmeye çalışıyorum, ve bir yerde çalışıyor. Bu CancelNotification yöntem Mİ denir, hangi düşünüyorsun görev iptal oldu, ama arka planda görev çalıştırma tutar, sonra tamamlanmadan, bu durum Görevi her zaman tamamlanmış ve asla iptal etti. Bir şekilde tamamen iptal olunca görevi durdurmak için var?
private async void TryTask()
{
CancellationTokenSource source = new CancellationTokenSource();
source.Token.Register(CancelNotification);
source.CancelAfter(TimeSpan.FromSeconds(1));
var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token);
await task;
if (task.IsCompleted)
{
MessageDialog md = new MessageDialog(task.Result.ToString());
await md.ShowAsync();
}
else
{
MessageDialog md = new MessageDialog("Uncompleted");
await md.ShowAsync();
}
}
private int slowFunc(int a, int b)
{
string someString = string.Empty;
for (int i = 0; i < 200000; i )
{
someString = "a";
}
return a b;
}
private void CancelNotification()
{
}
CEVAP
13 NİSAN 2012, Cuma
Cancellation. tanıtılan (okumaasync
yöntemleri ile NET büyük ölçüde değişmeden 4.0 ve o zamandan beri) ve CancellationToken
nasıl kullanılacağı hakkında yönergeler sağlar Task-Based Asynchronous Pattern,.
Özetlemek gerekirse, iptali destekleyen CancellationToken
her bir yöntem geçirmek ve bu yöntem belirli aralıklarla kontrol etmek gerekir.
private async Task TryTask()
{
CancellationTokenSource source = new CancellationTokenSource();
source.CancelAfter(TimeSpan.FromSeconds(1));
Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);
// (A canceled task will raise an exception when awaited).
await task;
}
private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
string someString = string.Empty;
for (int i = 0; i < 200000; i )
{
someString = "a";
if (i % 1000 == 0)
cancellationToken.ThrowIfCancellationRequested();
}
return a b;
}
Bunu Paylaş:
Nasıl bir yerel gıt taahhüt iptal etme...
Nasıl iptal jQuery/AJAX isteği iptal e...
Nasıl angularJS yayın bir olay üyeliği...
Nasıl iptal etmek için bir BackgroundW...
Nasıl iptal olursa interaktif rebase i...