using System.Threading.Tasks;
public static async Task Main() {
var bottleOpener = await ItemFactory.CreateBottleOpener();
Console.WriteLine(bottleOpener);
var moneyClip = await ItemFactory.CreateMoneyClip();
Console.WriteLine(moneyClip);
public class ItemFactory {
public static async Task<Item> CreateBottleOpener() {
return await Task.Run(() => new Item("Bottle Opener"));
public static async Task<Item> CreateMoneyClip() {
return await Task.Run(() => new Item("Money Clip"));
public string Name {get; }
internal Item(string name) {
public override String ToString() {