异步/等待未在调用方方法中返回

时间:2019-10-07 17:57:49

标签: c# async-await

我正在跟踪this以使异步/等待工作。

但是当我将以下代码作为debug运行时,它仅显示

  

HandleFile输入

     

等待...

然后继续运行,什么也没做,在我看来HandleFileAsync永不返回

public async Task  method1()
{
    Task<int> task =  HandleFileAsync();    
    log.Info("wait...");
    task.Wait();
    var x = task.Result;
    log.Info("print x.."+ x);
}


static async Task<int> HandleFileAsync()
{
    string file = @"C:\Users\..\..\text.txt";
    log.Info("HandleFile enter");
    int count = 0;

    // Read in the specified file.
    // ... Use async StreamReader method.
    using (StreamReader reader = new StreamReader(file))
    {
        string v = await reader.ReadToEndAsync();

        // ... Process the file data somehow.
        count += v.Length;

        // ... A slow-running computation.
        //     Dummy code.
        for (int i = 0; i < 1000; i++)
        {
            int x = v.GetHashCode();
            if (x == 0)
            {
                count--;
            }
        }  
    }
    log.Info("HandleFile exit");
    return count;
}

我如何运行它来打印x

1 个答案:

答案 0 :(得分:0)

看看您共享的方法,异步/等待看起来有点尴尬。

删除了第一个音符,并将空格更改回Task。由于您正在学习,所以这些事情很重要。

2nd删除task.wait命令,使用await。请参阅下面的更改。

public async Task method1()
{
    log.info('Starting process');
    int task = await HandleFileAsync();    
    log.Info("print x.."+ task);
}

我遇到了以下Getting Started with Async / Await。该博客文章与Xamarin有关,但它很好地解释了异步/等待模式。希望对您有所帮助。