Универсальный метод для нескольких классов
Эй,
У меня есть много классов, которые имеют опору и нуждаются в каком-то механизме, чтобы ждать изменения свойства.
Представьте себе это:
class A { public event Action OnChanged; public int Data { get; set; } public void DoWork() { /* after some time will update "Data" property */ } } class B { public event Action OnChanged; public int Data { get; set; } public void DoWork() { /* after some time will update "Data" property */ } } class C { public event Action OnChanged; public int Data { get; set; } public void DoWork() { /* after some time will update "Data" property */ } }
Теперь мне нужно будет создать больше таких классов в будущем, и мне нужен какой-то общий метод/расширение, чтобы дождаться изменения свойства "данные".
Я знаю, что могу сделать это с помощью событий, а затем с помощью потока.Сон, но это не лучший способ кодирования, так как сон занимает поток.
Другой способ состоял в том, чтобы использовать TaskCompletionSource следующим образом:
// this is for class A only... I would need to copy paste this for B and C static class Extension { public static Task<object> ToTask(this A manager) { TaskCompletionSource<object> taskCompletionSource = new TaskCompletionSource<object>(TaskCreationOptions.AttachedToParent); Action onChanged = null; onChanged = () => { manager.OnChanged -= onChanged; taskCompletionSource.SetResult(null); }; manager.OnChanged += onChanged; return taskCompletionSource.Task; } }
Вышесказанное позволяет иметь это в основном методе:
static void Main(string[] args) { A instance = new A(); instance.DoWork().ToTask().Wait(); }
..Но тогда мне пришлось бы писать расширение для каждого нового класса, который я создаю, а это не то, что я хочу. Кто-нибудь знает способ, как это обобщить?
Спасибо!
Что я уже пробовал:
Проверьте код выше - попробовал успокоить несколько вещей здесь.