我工作的具有法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的好例子。我正在寻找那样的东西。 –