我正在通过以下方法启动后台线程池线程上的任务
private async Task LoadCoreMatchDataAsync()
{
string errorMessage = String.Empty;
...
try
{
if (!HasConnection)
return;
IProgress<string> progressIndicator = new Progress<string>(LoadProgress);
EventsCollection = new BindableCollection<Taurus.MatchDetails>(
await MatchDataService.GetCollectionAsync(
this.client, progressIndicator, this.token));
...
}
catch (TimeoutException toe)
{
errorMessage = String.Format(
"Retrieval of the MatchDetails using connection " +
"\"{0}\" failed with the following TimeoutException: \"{1}\".",
this.ConnectionString,
toe.Message);
}
catch (OperationCanceledException)
{
// Do nothing, cancel silently.
}
// Display any errors.
if (!String.IsNullOrEmpty(errorMessage))
{
await dialogManager.ShowDialog<MessageDialogResult>(
new MessageBoxViewModel("Connection Timeout", errorMessage, mbs));
HasConnection = false;
}
}
GetCollectionAsync(...)
方法
public async Task<BindableCollection<Taurus.MatchDetails>> GetCollectionAsync(
MongoClient client, IProgress<string> progressIndicator, CancellationToken token)
{
return await Task.Factory.StartNew<BindableCollection<Taurus.MatchDetails>>(() =>
{
... // Somewhere in here we get a TimeoutException thrown.
}, token);
}
问题在于,当我打电话给await MatchDataService.GetCollectionAsync(...)
时,我得到预期的 TimeoutException
,VS2012抛出&#34; TimeoutException未被用户代码&#34;处理消息,当我清楚地处理&#34;继续&#34;中的异常时以正确的方式。如果我继续而不是中断,异常确实被捕获,我得到了我预期的错误消息。我只是不确定为什么VS2012告诉我异常是未处理的?
我基本上正在做Jon Skeets答案中明确描述的内容https://stackoverflow.com/a/19865613/626442。
感谢您的时间。
答案 0 :(得分:1)
你有&#34;只是我的代码&#34;打开(我在你提到的另一个问题的答案中提到过)。调试器指示&#34;用户代码&#34; (您的代码)没有处理异常 - 这是真的。该异常由框架代码捕获并放入任务。
关闭&#34; Just My Code&#34;调试器设置(在我看来,这是一个仅引起混淆且功能非常有限的功能)。