我创建了一个类库,用于对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;
谢谢你的时间。
你的例子似乎忽略了你等待结果的明显例子。
您的控制台应用程序应确保它使用的是异步主任务:
public static async Task Main(string[] args)
{
GraphMail grMail = new GraphMail();
var result = await grMail.GetMail();
}