在调试async方法时,应用程序挂在设备上
本文关键字:应用程序 调试 async 方法 | 更新日期: 2023-09-27 18:05:36
我遵循MSDN关于下载文件的指南。所以我做了一个非常简单的下载:
private async void performDownload_Click(object sender, RoutedEventArgs e)
{
CancellationTokenSource myCts = new CancellationTokenSource();
ulong bytesReceived = await DownloadWebFile("myFile.jpg", myCts.Token);
var forBreakpoint = 5; // set breakpoint here - isn't being hit on a device
// some further code
}
public async Task<ulong> DownloadWebFile(string fileName, CancellationToken ct)
{
Uri requestUri = new Uri("http://photojournal.jpl.nasa.gov/jpeg/PIA17555.jpg");
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
BackgroundDownloader downloader = new BackgroundDownloader();
downloader.Method = "GET";
downloader.CostPolicy = BackgroundTransferCostPolicy.Always;
DownloadOperation operation = downloader.CreateDownload(requestUri, file);
operation.Priority = BackgroundTransferPriority.High;
await operation.StartAsync().AsTask(ct);
ulong bytes = operation.Progress.BytesReceived;
return bytes; // set breakpoint here - it is being hit
} // here App hangs (only on Device, on emulator works)
奇怪的情况是,在模拟器上一切工作,但在设备(Lumia 820)的代码挂起每次当你调试它。如果您将断点设置在DownloadWebFile
- return bytes
的最后一行,它被击中,显示正确的字节数,您可以向前迈进,但只能到括号。当你尝试进一步前进时,应用程序挂起(没有断点,它也挂起)。我可以通过IsolatedStorageExplorer看到的文件被正确下载。
似乎有时程序在调试期间挂起时,试图从异步方法(感谢@yasen)
最近,在设备上调试时,我无法走出异步方法。如果你有这个问题,一个简单的解决方法是,一旦你确定这些方法能正常工作,就跳过它们(不要进入它们,不要在它们里面放断点)。
另外,我还没有在模拟器上遇到这样的问题,所以如果可能的话-只是调试它,而不是一个设备。
我不知道是什么引起的,虽然。