为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 C# 中的非异步函数中使用 await 调用异步函数?

如何在 C# 中的非异步函数中使用 await 调用异步函数?

C#
宝慕林4294392 2022-11-22 10:20:34

我有一个异步函数调用 myAsyncfuntion() 看起来像这样


public async Task TakePhotoBasicAndSaveAndDisplayUWP()

{

    var photoImplementation = new MediaCaptureImplementation();

    photoImplementation.TakePhotoTexture2DAsync();

    // Some code here...


    await photoImplementation.SavePhotoToPicturesLibraryAsync();

}

现在我想从另一个非异步函数调用这个函数,所以我喜欢这样。基本上,我将一个按钮连接到 TakePhotoBasicAndSaveAndDisplay(),只要单击该按钮,该函数就会启动内部的异步函数。但是异步函数似乎没有被调用。


public void TakePhotoBasicAndSaveAndDisplay()

{

   #if WINDOWS_UWP

    var task = Task.Run(async () => await TakePhotoBasicAndSaveAndDisplayUWP());

   #endif

}

谁能帮帮我?我正在团结一致


查看完整描述

3 回答

?
慕容708150

TA贡献1562条经验 获得超3个赞

正如 Marc 评论的那样,“我如何从同步方法调用异步方法”的唯一正确答案是“你不这样做”。

但是异步函数似乎没有被调用。

它肯定会被调用,但它可能无法正常工作,因为它不在主 UI 线程上。Task.Run在线程池线程上执行它。此外,我怀疑永远不会等待taskin var task = Task.Run(async () => await TakePhotoBasicAndSaveAndDisplayUWP());,因此任何异常TakePhotoBasicAndSaveAndDisplayUWP都会被忽略。即,异常说明某些 API 必须从主 UI 线程而不是线程池线程调用。

我点击一个按钮TakePhotoBasicAndSaveAndDisplay

如果TakePhotoBasicAndSaveAndDisplay实际上是一个事件处理程序,那么您可以使用async void

public async void TakePhotoBasicAndSaveAndDisplay()

{

  #if WINDOWS_UWP

  await TakePhotoBasicAndSaveAndDisplayUWP();

  #endif

}


查看完整回答
反对 回复 2022-11-22
?
米脂

TA贡献1562条经验 获得超3个赞

只有当你不想等待它并且“不关心”你可以做到的结果时,你才这样做async void


public async void TakePhotoBasicAndSaveAndDisplayUWP()

{

    var photoImplementation = new MediaCaptureImplementation();

    photoImplementation.TakePhotoTexture2DAsync();

    // Some code here...


    await photoImplementation.SavePhotoToPicturesLibraryAsync();

}

比你可以称之为


    public void TakePhotoBasicAndSaveAndDisplay()

    {

#if WINDOWS_UWP

       TakePhotoBasicAndSaveAndDisplayUWP();

#endif

    }


查看完整回答
反对 回复 2022-11-22
?
隔江千里

TA贡献1608条经验 获得超10个赞

您始终可以在末尾调用带有 .Wait() 的异步方法。

myAsyncfuntion.Wait();

它有点毁了整个异步的东西。该方法将同步阻塞,直到任务完成。

您可以查看此回复以了解更多详细信息。


查看完整回答
反对 回复 2022-11-22
  • 3 回答
  • 0 关注
  • 12 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信