Asp.net mvc MVC5-异步任务死锁?

Asp.net mvc MVC5-异步任务死锁?,asp.net-mvc,asp.net-mvc-5,async-await,deadlock,Asp.net Mvc,Asp.net Mvc 5,Async Await,Deadlock,我想我的web应用程序在调用YouTube API服务时遇到死锁,所以我想知道如何以正确的方式解决这个问题。我怀疑这与以下情况类似: 请有人简单地告诉我,为什么我的web应用程序挂起(请参阅内联注释)以及应该如何正确解决它?谢谢 public ActionResult Index() { YouTubeHelper yth = new YouTubeHelper(); bool unpublishVideo = yth.UpdateVideoOnYouTube(17, "pub

我想我的web应用程序在调用YouTube API服务时遇到死锁,所以我想知道如何以正确的方式解决这个问题。我怀疑这与以下情况类似:

请有人简单地告诉我,为什么我的web应用程序挂起(请参阅内联注释)以及应该如何正确解决它?谢谢

public ActionResult Index()
{
    YouTubeHelper yth = new YouTubeHelper();
     bool unpublishVideo = yth.UpdateVideoOnYouTube(17, "public").Result;
}

public async Task<bool> UpdateVideoOnYouTube(int propertyId, string publishStatus)
{
.....
    YouTubeService youtubeService = await GetYouTubeService(db);
.....
}

public async Task<YouTubeService> GetYouTubeService(ApplicationDbContext db)
{
....
    if (!await credential.RefreshTokenAsync(CancellationToken.None)) //It hangs here!!
        {
        ....
    }
....
}
public ActionResult Index()
{
YouTubeHelper yth=新的YouTubeHelper();
bool unpublishVideo=yth.UpdateVideoOnYouTube(17,“public”).Result;
}
公共异步任务UpdateVoyonOutube(int-propertyId,字符串publishStatus)
{
.....
YouTube服务YouTube服务=等待GetYouTube服务(db);
.....
}
公共异步任务GetYouTubeService(ApplicationDbContext db)
{
....
如果(!wait credential.refreshtTokenAsync(CancellationToken.None))//它挂在这里!!
{
....
}
....
}
死锁已被解释。总之,异步方法在完成之前需要ASP.NET请求上下文,但是对
Result
的调用会阻止ASP.NET请求上下文,直到异步方法完成为止

为了避免死锁,不要阻塞异步代码。使用
等待
而不是
结果

public async Task<ActionResult> Index()
{
  YouTubeHelper yth = new YouTubeHelper();
  bool unpublishVideo = await yth.UpdateVideoOnYouTube(17, "public");
}
公共异步任务索引()
{
YouTubeHelper yth=新的YouTubeHelper();
bool unpublishVideo=wait yth.UpdateVideoOnYouTube(17,“public”);
}
死锁已被解释。总之,异步方法在完成之前需要ASP.NET请求上下文,但是对
Result
的调用会阻止ASP.NET请求上下文,直到异步方法完成为止

为了避免死锁,不要阻塞异步代码。使用
等待
而不是
结果

public async Task<ActionResult> Index()
{
  YouTubeHelper yth = new YouTubeHelper();
  bool unpublishVideo = await yth.UpdateVideoOnYouTube(17, "public");
}
公共异步任务索引()
{
YouTubeHelper yth=新的YouTubeHelper();
bool unpublishVideo=wait yth.UpdateVideoOnYouTube(17,“public”);
}

等待对UpdateVideoOnYoutTube方法的调用,并删除对
结果的访问
proeprty但是我认为ActionResult需要是异步的?这是正确且良好的做法吗?是的,使其成为
async任务是的,修复了它。感谢您的帮助…等待对UpdateVideoOnYoutTube方法的调用,并删除对
结果的访问,但是我认为ActionResult需要是异步的?这是正确且良好的做法吗?是的,使其成为
async任务是的,修复了它。谢谢你的帮助。。。。