我工作的具有法Action<T>
參數類:無效,任務返回方法區分
public void RegisterCallback<T> (Action<T> callback);
此作品不夠好。
instance.RegisterCallback<string>(Callback); //method group
instance.RegisterCallback<string>(t => {}); //lambda
現在我想爲此方法創建一個過載,它接受async
方法。所以我可以在任務返回回調中使用它,並以不同的方式處理它們。
instance.RegisterCallback<string>(AsyncCallback); //method group with async
哪裏AsyncCallback
是
private Task AsyncCallback(string s)
{
return Task.Delay(0);
}
天真的做法是有這樣一個方法:
void RegisterCallback<T>(Func<T, Type> callback);
它雖然也存在一些問題:
//1
instance.RegisterCallback<string>(async t => await Task.Delay(0));
//2
instance.RegisterCallback<string>(AsyncCallback); //method group with async
的第一個獲得資源由於不明確的調用而導致第二次編譯失敗。
嗯,這makes sense和我確定這個接口:
void RegisterAsyncCallback<T>(Func<T, Task> callback);
但是這兩個電話都沒有問題,編譯:
instance.RegisterCallback<string>(async t => await Task.Delay(0));
instance.RegisterAsyncCallback<string>(async t => await Task.Delay(0));
有沒有設計這個公共API的方式以便用戶只能使用void
回調,一個方法和任務返回另一個。
也許有人可以指點我現有的api,類似的問題解決了嗎?
完整的代碼可以在here找到。
感謝Task.Run的好例子。我正在尋找那樣的東西。 –