C# 当Task.Status更改为running时,是否有方法得到通知?

C# 当Task.Status更改为running时,是否有方法得到通知?,c#,events,async-await,inotifypropertychanged,C#,Events,Async Await,Inotifypropertychanged,我正在编写一个类,它运行任务并根据任务通知 我想不出解决方案的一个问题是如何在任务状态从TaskStatus.WaitingForActivation变为TaskStatus.Running时通知 缩短代码如下: using System.ComponentModel; using System.Runtime.CompilerServices; using System.Threading.Tasks; public abstract class ExecutionTracker : INo

我正在编写一个类,它运行任务并根据任务通知

我想不出解决方案的一个问题是如何在任务状态从
TaskStatus.WaitingForActivation
变为
TaskStatus.Running
时通知

缩短代码如下:

using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;

public abstract class ExecutionTracker : INotifyPropertyChanged
{
    protected ExecutionTracker(Task task)
    {
        Task = task;
        AwaitTask(task);
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public Task Task { get; }

    public TaskStatus Status => Task.Status;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private async void AwaitTask(Task task)
    {
        try
        {
            // This is where status goes from WaitingForActivation to Running
            // and I want to do OnPropertyChanged(nameof(Status)) when it happens.
            // A hack would be setting a flag awaiting = true here and return TaskStatus.Running if the flag is true.
            // ^ feels nasty
            await task.ConfigureAwait(false);
        }
            // ReSharper disable once EmptyGeneralCatchClause We don't want to propagate errors here. Just make them bindable.
        catch
        {
        }

        // Signal propertychanges depending on result
    }
}
你不能(有效地)。你可能做错了什么,或者如果你认为你需要的话,做出了一些无效的假设

许多任务从不转换为
TaskStatus.Running
状态。例如,从
TaskCompletionSource
创建的所有任务(包括通过异步方法返回的任务)直接从
WaitingForActivation
进入3种已完成状态之一。而且,当任务转换为运行时,没有任务会向其调用方公开(如果确实是这样的话)

如果您确保所有任务都在自定义的
TaskScheduler
上调度,从而知道何时将要执行这些任务,那么您就可能粗略地知道它发生的时间(除了轮询之外,这会很糟糕)。但正如我所说的,你真的在逆流而上,应该重新思考你认为依赖于此的任何设计