c# - How to abort or terminate a task of TPL when cancellation token is unreachable? -


let's consider method:

task foo(ienumerable items, cancellationtoken token) {     return task.run(() =>     {         foreach (var in items)             token.throwifcancellationrequested();      }, token); } 

then have consumer:

var cts = new cancellationtokensource(); var task = foo(items, cts.token); task.wait(); 

and example of items:

ienumerable items {         {         yield return 0;         task.delay(timeout.infinitetimespan).wait();         yield return 1;     } } 

what task.wait? i cannot put cancel token collection of items.

how kill not responding task or around this?

i found 1 solution allows put cancellation token items originating thid parties:

public static ienumerable<t> tocancellable<t>(this ienumerable<t> @this, cancellationtoken token) {     var enumerator = @this.getenumerator();      (; ; )     {         var task = task.run(() => enumerator.movenext(), token);         task.wait(token);          if (!task.result)             yield break;          yield return enumerator.current;     } } 

now need use:

items.tocancellable(cts.token) 

and not hang after cancel request.


Comments

Popular posts from this blog

image - ClassNotFoundException when add a prebuilt apk into system.img in android -

I need to import mysql 5.1 to 5.5? -

Java, Hibernate, MySQL - store UTC date-time -