using System.Threading.Tasks;
public static void Main()
var stringTask = Task.FromResult("sample");
stringTask.TeeAsync(st =>
return Task.CompletedTask;
public static class Extensions
public static async Task<T> TeeAsync<T>(this T source, Func<T, Task> asyncAction)
Console.WriteLine("first overload");
public static async Task<T> TeeAsync<T>(this Task<T> asyncSource, Func<T, Task> asyncAction)
Console.WriteLine("second overload");
var source = await asyncSource;