// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // // // An exception for task cancellations. // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.Serialization; namespace System.Threading.Tasks { /// <summary> /// Represents an exception used to communicate task cancellation. /// </summary> [Serializable] [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] public class TaskCanceledException : OperationCanceledException { [NonSerialized] private readonly Task? _canceledTask; // The task which has been canceled. /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> class. /// </summary> public TaskCanceledException() : base(SR.TaskCanceledException_ctor_DefaultMessage) { } /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> /// class with a specified error message. /// </summary> /// <param name="message">The error message that explains the reason for the exception.</param> public TaskCanceledException(string? message) : base(message ?? SR.TaskCanceledException_ctor_DefaultMessage) { } /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> /// class with a specified error message and a reference to the inner exception that is the cause of /// this exception. /// </summary> /// <param name="message">The error message that explains the reason for the exception.</param> /// <param name="innerException">The exception that is the cause of the current exception.</param> public TaskCanceledException(string? message, Exception? innerException) : base(message ?? SR.TaskCanceledException_ctor_DefaultMessage, innerException) { } /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> /// class with a specified error message, a reference to the inner exception that is the cause of /// this exception, and the <see cref="CancellationToken"/> that triggered the cancellation. /// </summary> /// <param name="message">The error message that explains the reason for the exception.</param> /// <param name="innerException">The exception that is the cause of the current exception.</param> /// <param name="token">The <see cref="CancellationToken"/> that triggered the cancellation.</param> public TaskCanceledException(string? message, Exception? innerException, CancellationToken token) : base(message ?? SR.TaskCanceledException_ctor_DefaultMessage, innerException, token) { } /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> class /// with a reference to the <see cref="Tasks.Task"/> that has been canceled. /// </summary> /// <param name="task">A task that has been canceled.</param> public TaskCanceledException(Task? task) : base(SR.TaskCanceledException_ctor_DefaultMessage, task != null ? task.CancellationToken : CancellationToken.None) { _canceledTask = task; } /// <summary> /// Initializes a new instance of the <see cref="TaskCanceledException"/> /// class with serialized data. /// </summary> /// <param name="info">The <see cref="SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> /// <param name="context">The <see cref="StreamingContext"/> that contains contextual information about the source or destination. </param> [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlFormat = Obsoletions.SharedUrlFormat)] [EditorBrowsable(EditorBrowsableState.Never)] protected TaskCanceledException(SerializationInfo info, StreamingContext context) : base(info, context) { } /// <summary> /// Gets the task associated with this exception. /// </summary> /// <remarks> /// It is permissible for no Task to be associated with a /// <see cref="TaskCanceledException"/>, in which case /// this property will return null. /// </remarks> public Task? Task => _canceledTask; } } |