У меня есть эта кодовая логика для решения моих задач:
public abstract class BaseJob{
public bool Running { get; private set; }
public CancellationToken Token => _tokenSource.Token;
private CancellationTokenSource _tokenSource;
public virtual void Start()
{
_tokenSource = new CancellationTokenSource();
Running = true;
}
}
Теперь, когда я наследую BaseJob
, у меня будет такая ситуация:
public class CustomJob: BaseJob{
public MyEnum Status {get; private set;}
public StopRequested { get; set;}
public override async void Start(){
base.Start();
while(!StopRequested){
await MyLongRunningMethod();
}
//base.Running = true but I can't access it here!
}
public async Task<bool> MyLongRunningMethod(){
await Task.Run(()=>{
//more work
},this.Token);
//someWork
return false;
}
}
Как вы можете видеть, я могуНет доступа к Running
, чтобы установить его в значение false, как только myJob
завершится, и я хочу, чтобы BaseJob
справился с этим.
Какие изменения логики кода я должен внести в базовый класс, чтобы автоматическиопределить, когда заканчивается myJob
, а затем завершить задачу с помощью Running = false
, не обращаясь к наименьшему количеству из унаследованных классов?