[英]Starting a task in a property setter
在不鎖定的情況下在屬性設置器中啟動任務有什么問題嗎?
private someObject obj;
public SomeObject Obj
get { return obj; }
set
{
if (value != obj)
{
Task.Factory.StartNew(() =>
{
UpdateToSql(value); //if object exists updates it other wise inserts it
});
obj = value;
OnPropertyChanged("Obj");
}
}
在setter內部明確啟動任務可能不是一個好主意,因為這很不尋常。
一種更常用的方法是為其創建一個方法:API用戶更習慣於啟動任務的方法:
public void SetAndPersistObj(SomeObject value) {
if (value != obj)
{
Task.Factory.StartNew(() =>
{
UpdateToSql(value); //if object exists updates it other wise inserts it
});
obj = value;
OnPropertyChanged("Obj");
}
}
但是,即使這樣可能也不是很理想,因為它將持久性與對象實現過多地耦合在一起。 更好的方法是在已觸發的屬性更改事件中添加偵聽器,然后從那里開始任務:
ObjChanged += () => Task.Factory.StartNew(() => {
UpdateToSql(value);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.