শ্রেণি রুলিক্যান্সেলারের পূর্ববর্তী কোডের সাথে তুলনা করে , আমি কোডটি ব্যবহার করে চালাতে চেয়েছিলাম CancellationTokenSource
।
বাতিল টোকেন্সে উল্লিখিত হিসাবে আমি কীভাবে এটি ব্যবহার করব , অর্থাত্ কোনও ব্যতিক্রম ছোঁড়া / ধরা না দিয়ে? আমি কি IsCancellationRequested
সম্পত্তি ব্যবহার করতে পারি ?
আমি এটিকে এভাবে ব্যবহার করার চেষ্টা করেছি:
cancelToken.ThrowIfCancellationRequested();
এবং
try
{
new Thread(() => Work(cancelSource.Token)).Start();
}
catch (OperationCanceledException)
{
Console.WriteLine("Canceled!");
}
তবে এটি cancelToken.ThrowIfCancellationRequested();
পদ্ধতিতে একটি রান-টাইম ত্রুটি দিয়েছে Work(CancellationToken cancelToken)
:
System.OperationCanceledException was unhandled
Message=The operation was canceled.
Source=mscorlib
StackTrace:
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33
at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
আমি যে কোডটি সাফল্যের সাথে চালিয়েছি তা নতুন থ্রেডে অপারেশন-ক্যান্সেলড এক্সসেপশনটি ধরেছে:
using System;
using System.Threading;
namespace _7CancellationTokens
{
internal class Token
{
private static void Main()
{
var cancelSource = new CancellationTokenSource();
new Thread(() =>
{
try
{
Work(cancelSource.Token); //).Start();
}
catch (OperationCanceledException)
{
Console.WriteLine("Canceled!");
}
}).Start();
Thread.Sleep(1000);
cancelSource.Cancel(); // Safely cancel worker.
Console.ReadLine();
}
private static void Work(CancellationToken cancelToken)
{
while (true)
{
Console.Write("345");
cancelToken.ThrowIfCancellationRequested();
}
}
}
}
CancellationTokenSource
পদ্ধতিগুলি, পোলিংয়ের সাথে দীর্ঘকাল চলমান পদ্ধতিগুলি এবং কলব্যাক ব্যবহারের কয়েকটি দুর্দান্ত উদাহরণ রয়েছে ।