あるクラスから開始したタスクを他のクラスから取り消したいと思います。以下は、私が2つのクラスを持ち、異なるクラスからタスクを取り消したい場合のサンプルプログラムです。キャンセルトークンが機能していないようです。別のクラスからタスクをキャンセルする方法
namespace threadingiwthcancel
{
class ThreadExample
{
public async Task PrintSomething(CancellationToken token)
{
int i = 0;
while (true)
{
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancel requested");
break;
}
await Task.Delay(TimeSpan.FromSeconds(1));
Console.WriteLine(i);
i++;
}
}
}
class Cancel
{
public void cancelTask()
{
CancellationTokenSource source = new CancellationTokenSource();
source.Cancel();
}
}
class Program
{
static void Main(string[] args)
{
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
callasyncmethod(token);
Thread.Sleep(TimeSpan.FromSeconds(2));
Cancel c = new Cancel();
c.cancelTask();
Console.ReadLine();
}
private static async void callasyncmethod(CancellationToken token)
{
ThreadExample te = new ThreadExample();
await te.PrintSomething(token);
}
}
}
:私はそれに元ソースを渡すようにしてくださいいくつかの他のクラスから
を一つのクラスによって開始されたタスクをキャンセルしたい