using System.Threading.Tasks;
public interface IMyInterface<T>
void RegisterCallback(Action<T> callback);
void RegisterAsyncCallback(Func<T, Task> callback);
public class Implementation : IMyInterface<string>
public void RegisterCallback(Action<string> callback)
public void RegisterAsyncCallback(Func<string, Task> callback)
Task.Run(() => callback("hello")).Wait();
public MyClass(IMyInterface<string> instance)
instance.RegisterCallback(Callback);
instance.RegisterCallback(t => { });
instance.RegisterCallback(async t => await Task.Delay(0));
instance.RegisterAsyncCallback(async t => await Task.Delay(0));
instance.RegisterAsyncCallback(t => Task.Delay(0));
instance.RegisterAsyncCallback(AsyncCallbackWithAwait);
instance.RegisterAsyncCallback(AsyncCallback);
private void Callback(string obj)
throw new NotImplementedException();
private Task AsyncCallback(string s)
public async Task AsyncCallbackWithAwait(string s)