using System.Threading.Tasks;
static public void Main()
var library = new Library();
library.Callback = GetMoreData;
var task = Task.Run( () => library.Foo() );
Console.WriteLine("Other thread is running.");
static string GetMoreData()
public Func<string> Callback { get; set; }
var moreData = Callback();
Console.WriteLine("Library received this data: {0}", moreData);