提问者:小点点

C#控制台应用程序(在不同的项目中)调用类库中的异步方法挂起


我创建了一个类库,用于对MS图形应用编程接口进行异步调用。它在同一个项目中的控制台应用程序中工作得很好。如果将控制台应用添加为解决方案中的新项目并调用异步方法,则对图形的调用将挂起。我认为这可能是一个僵局,但我还没能解决它(也许我需要重新思考架构...?)。下面是dll(GraphMail)中的(按比例缩小的)方法:

//graphClient is an already initiated GraphServiceClient
    public async Task<string> GetMail()
    {
        var messages = await graphClient.Users[user]
            .MailFolders[folder]                
            .Messages                
            .Request()
            .Filter(filter)
            .Select(u => new {
                u.Id,
                u.SentDateTime,
                u.From,
                u.ToRecipients,
                u.Subject,
                u.Body
            })
            .GetAsync();

    return "I'm back";
}

以及来自程序的呼叫(每个评论都是一次尝试):

        GraphMail grMail = new GraphMail();

        //var result = grMail().Result;
        //var result = bhMail.GetMail().GetAwaiter().GetResult();
        //var result = Task.Run(() => grMail()).Result;

谢谢你的时间。


共1个答案

匿名用户

你的例子似乎忽略了你等待结果的明显例子。

您的控制台应用程序应确保它使用的是异步主任务:

public static async Task Main(string[] args)
{
   GraphMail grMail = new GraphMail();

   var result = await grMail.GetMail();
}