首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用类库中异步方法的C#控制台应用程序(在另一个项目中)挂起

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

Stack Overflow用户
提问于 2021-12-16 14:17:01
回答 1查看 113关注 0票数 0

我创建了一个类库,用于异步调用MS Graph。它在一个生活在同一个项目中的控制台应用程序中运行得很好。如果将控制台应用程序添加为解决方案中的新项目并调用异步方法,则对Graph的调用只会挂起。我认为这可能是一个死锁,但我还无法修复它(也许我需要重新考虑一下架构.?)。下面是dll (GraphMail)中的(缩小)方法:

代码语言:javascript
运行
复制
//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";
}

程序的调用(每个评论都是一次尝试):

代码语言:javascript
运行
复制
        GraphMail grMail = new GraphMail();

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

耽误您时间,实在对不起。

EN

回答 1

Stack Overflow用户

发布于 2021-12-16 14:34:32

你的例子似乎忽略了你等待结果的显而易见的例子。

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

代码语言:javascript
运行
复制
public static async Task Main(string[] args)
{
   GraphMail grMail = new GraphMail();

   var result = await grMail.GetMail();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70380525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档