我有一个异步函数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
}
有人可以帮助我吗? 我正在团结一致
答案 0 :(得分:1)
只有当您不想等待它并且“不在乎”结果时,您才这样做 您可以将其设置为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
}
(请参阅this good tutorial)
答案 1 :(得分:1)
正如Marc所说,“如何从同步方法中调用异步方法”的唯一正确答案是“您不知道”。
但是似乎未调用异步函数。
它肯定会被调用,但是由于它不在主UI线程上,因此可能无法正常工作。 Task.Run
正在线程池线程上执行它。另外,我怀疑task
中的var task = Task.Run(async () => await TakePhotoBasicAndSaveAndDisplayUWP());
从未被等待,因此TakePhotoBasicAndSaveAndDisplayUWP
中的任何异常都将被忽略。也就是说,一些异常表明必须从主UI线程而不是线程池线程中调用某些API。
我在
TakePhotoBasicAndSaveAndDisplay
上按下了一个按钮
如果TakePhotoBasicAndSaveAndDisplay
实际上是an event handler, then you can use async void
:
public async void TakePhotoBasicAndSaveAndDisplay()
{
#if WINDOWS_UWP
await TakePhotoBasicAndSaveAndDisplayUWP();
#endif
}
答案 2 :(得分:-2)
您总是可以在末尾使用.Wait()调用异步方法。
myAsyncfuntion.Wait();
这有点毁了整个异步的事情。该方法将同步阻止,直到任务完成。
您可以检查此response以获得更多详细信息。