非静态字段MyMethodAsync需要一个对象

时间:2016-03-30 11:34:01

标签: c# .net async-await

我正在尝试了解C#中的asyncawait,并且一直在阅读MSDN。我到达了this example,我已将其复制到控制台应用程序中,希望使用调试器来查看异步处理异步的方式。

使用信息in this answer,我调整了MS代码以在应用程序中运行它(可能错误地作为学习者)。我得到的错误信息就在这一行:

Task<string> theTask = DelayAsync();
  

CS0120非静态字段需要对象引用,   方法或属性'Program.DelayAsync()'

这是我做错了什么,还是MSDN代码中的错误?任何人都可以解释如何从控制台应用程序运行DoSomethingAsync()方法,以便我可以在调试器中看到如何返回异常吗?

class Program
{
    static void Main()
    {
        DoSomethingAsync().Wait();
    }

    static async Task DoSomethingAsync()
    {
        Task<string> theTask = DelayAsync();
        try
        {
            string result = await theTask;
            Debug.WriteLine("Result: " + result);
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Exception Message: " + ex.Message);
        }
        Debug.WriteLine("Task IsCanceled: " + theTask.IsCanceled);
        Debug.WriteLine("Task IsFaulted:  " + theTask.IsFaulted);
        if (theTask.Exception != null)
        {
            Debug.WriteLine("Task Exception Message: " + theTask.Exception.Message);
            Debug.WriteLine("Task Inner Exception Message: " + theTask.Exception.InnerException.Message);
        }
    }

    private async Task<string> DelayAsync()
    {
        await Task.Delay(100);
        //throw new OperationCanceledException("canceled");
        //throw new Exception("Something happened.");
        return "Done";
    }
}

0 个答案:

没有答案