using System.Threading.Tasks;
public static class Program
public static async Task Main()
async ValueTask<int> MyMethod1(CancellationToken token)
token.ThrowIfCancellationRequested();
await Task.CompletedTask;
ValueTask<int> task = MyMethod1(new CancellationToken(true));
Console.Write($"MyMethod1, IsCanceled: {task.IsCanceled}, ");
catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
ValueTask<int> MyMethod2(CancellationToken token)
if (token.IsCancellationRequested)
return new ValueTask<int>(Task.FromCanceled<int>(token));
return new ValueTask<int>(13);
ValueTask<int> task = MyMethod2(new CancellationToken(true));
Console.Write($"MyMethod2, IsCanceled: {task.IsCanceled}, ");
catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
ValueTask<int> MyMethod3(CancellationToken token)
if (token.IsCancellationRequested)
return new ValueTask<int>(
Task.FromException<int>(new OperationCanceledException(token)));
return new ValueTask<int>(13);
ValueTask<int> task = MyMethod3(new CancellationToken(true));
Console.Write($"MyMethod3, IsCanceled: {task.IsCanceled}, ");
catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }