C# 将wait与实现CancelEventArgs的事件一起使用
我有一个与此类似的基类:C# 将wait与实现CancelEventArgs的事件一起使用,c#,task-parallel-library,async-await,C#,Task Parallel Library,Async Await,我有一个与此类似的基类: public abstract class PageBase { public PageBase() { } public Task<object> Refresh(ModelRequirements requirements) { // does work of talking to server and getting data } private DataStates _dataState;
public abstract class PageBase
{
public PageBase() { }
public Task<object> Refresh(ModelRequirements requirements)
{
// does work of talking to server and getting data
}
private DataStates _dataState;
public DataStates DataState()
{
get { _dataState = value; }
set
{
var e = new DataStateChangingEventArgs();
// the following method raises the changing event.
// it does not return a task, and cannot be awaited.
OnDataStateChanging(e);
if (e.Cancel)
return;
_dataState = value;
}
}
public event EventHandler<DataStateChangingEventArgs> DataStateChanging;
protected virtual void OnDataStateChanging(DataStateChangingEventArgs e)
{
var dataStateChanging = DataStateChanging;
if (DataStateChanging != null)
DataStateChanging(this, e);
}
}
等待刷新(在OnDataStateChanging覆盖内)是一个问题,因为它返回。在不执行OnDataStateChanging返回任务的情况下,是否有此模式的解决方案?有一种期望,即属性设置程序将实际设置该属性,并在设置程序返回之前设置该属性。违反这一预期将导致混乱 这种模式有解决方案吗 我建议您将属性更改为getter,并使用一种方法来处理该集:
public DataStates DataState { get; private set; }
public Task UpdateDataStateAsync()
{
// ... Use await as necessary
这将使您的API与内部实际发生的情况相匹配,并且更易于理解
public DataStates DataState { get; private set; }
public Task UpdateDataStateAsync()
{
// ... Use await as necessary