[英]Cancel an internal task using CancellationToken in ASP.NET Core2.2
我有一個包含無限循環的方法。 我從 main 方法調用該方法,如果需要超過 2 秒,我想取消它。 我嘗試了這些方法
如何使用 CancellationToken 取消任務並等待 Task.WhenAny
和許多其他鏈接,但沒有工作。 這是我的代碼
static void Main(string[] args)
{
var cts = new CancellationTokenSource(2000);
var task = Task.Run(() => RunTask(), cts.Token);
await task;
}
public static void RunTask()
{
while (true)
{
Console.WriteLine("in while");
}
}
我也嘗試取消我的令牌,但沒有成功。 無法 Dispose task
。 我無權訪問RunTask
源代碼。 我只能運行它。 我無法將CancellationToken
發送到我的方法。 如何終止RunTask()
方法?
取消令牌是一種請求取消的方式。 由正在運行的代碼來接受該請求並實際停止工作。 這不像殺死一個進程。 例如,如果你有類似的東西:
public static void RunTask(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
Console.WriteLine("in while");
}
}
然后,當它被取消時,循環將結束。 但是,鑒於當前代碼沒有提供任何取消方法並且您無法修改它,因此無法取消它。
這種方法怎么樣:
static void Main(string[] args)
{
var cts = new CancellationTokenSource(2000);
var task = Task.Run(() => RunTask(cts.Token), cts.Token);
await task;
}
public static void RunTask(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
Console.WriteLine("in while");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.