簡體   English   中英

在屬性設置器中啟動任務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM