处理Cassandra中延迟任务的异常

时间:2015-06-07 20:56:15

标签: c# asynchronous cassandra async-await datastax-enterprise

我看过很多关于任务异常处理的帖子,我不清楚如何解决这个问题。我的应用程序在我的一个任务中出现异常时崩溃。我无法捕获异常,我的应用程序处于无法运行状态。

更新:这似乎只在DataStax Cassandra C#驱动程序中调用ExecuteAsync方法时发生。这让我相信这是驱动程序本身的一个问题。当我创建自己的任务并抛出异常时,它可以正常工作。

大多数用例似乎等待所有异步调用,但在我的情况下,我需要触发一组异步命令,然后使用WhenAll一起等待它们(而不是单独等待每一个)。

这是基于这篇文章,它展示了如何批处理任务以发送到Cassandra数据库: https://lostechies.com/ryansvihla/2014/08/28/cassandra-batch-loading-without-the-batch-keyword/

当您想要执行多个异步请求而不必将它们链接起来时,这与Microsoft建议的做法相同: https://social.msdn.microsoft.com/Forums/en-US/6ab8c611-6b0c-4390-933c-351e56b62526/await-multiple?forum=async

我的申请入境点:

public void Go()
{
   dbTest().Wait();

我的异步方法......

private async Task dbTest() {

List<Task> tasks = new List<Task>();
Task<RowSet> resultSetFuture = session.ExecuteAsync(bind); // spawn a db exception
Task<RowSet> resultSetFuture2 = session.ExecuteAsync(bind);
Task<RowSet> resultSetFuture3 = session.ExecuteAsync(bind);

tasks.Add(resultSetFuture);
tasks.Add(resultSetFuture2);
tasks.Add(resultSetFuture3);
try
{
   await Task.WhenAll(tasks.ToArray());                   
}                
catch (Exception ex)
{
   ...
}

所有迹象都表明,WhenAll应该正确捕获异步方法中的任何异常,但在这种情况下它只会锁定我的应用程序。

0 个答案:

没有答案