C# 如果需要超过x毫秒,如何超时调用?
我正在使用C语言,并且正在从cassandra获取数据,所以我正在使用下面的代码,它从cassandra获取数据,并且工作正常 唯一的问题是我的ProcessCassQuery方法-我正在将CancellationToken.None传递给我的requestExecuter函数,这可能不是正确的做法 如果需要超过800毫秒,我需要超时查询,那么如何在这里正确使用CancellationToken来超时查询?Cassandra驱动程序还没有处理CancellationToken,所以我需要通过其他一些方式在外部执行此操作。此代码将以非常高的吞吐量被调用,因此在超时调用时需要高效C# 如果需要超过x毫秒,如何超时调用?,c#,cancellationtokensource,C#,Cancellationtokensource,我正在使用C语言,并且正在从cassandra获取数据,所以我正在使用下面的代码,它从cassandra获取数据,并且工作正常 唯一的问题是我的ProcessCassQuery方法-我正在将CancellationToken.None传递给我的requestExecuter函数,这可能不是正确的做法 如果需要超过800毫秒,我需要超时查询,那么如何在这里正确使用CancellationToken来超时查询?Cassandra驱动程序还没有处理CancellationToken,所以我需要通过其他
/**
*
* Below method does multiple async calls on each table for their corresponding id's by limiting it down using Semaphore.
*
*/
private async Task<List<T>> ProcessCassQueries<T>(IList<int> ids, Func<CancellationToken, int, Task<T>> mapperFunc, string msg) where T : class
{
var tasks = ids.Select(async id =>
{
await semaphore.WaitAsync();
try
{
return await ProcessCassQuery(ct => mapperFunc(ct, id), msg);
}
finally
{
semaphore.Release();
}
});
return (await Task.WhenAll(tasks)).Where(e => e != null).ToList();
}
// this might not be good idea to do it. how can I improve below method?
private Task<T> ProcessCassQuery<T>(Func<CancellationToken, Task<T>> requestExecuter, string msg) where T : class
{
return requestExecuter(CancellationToken.None);
}
您可以使用以下代码: //这样做可能不是个好主意。我如何改进下面的方法? 私有异步任务进程CassQueryFunc requestExecuter,字符串msg,其中T:class { 使用var cts=新的CancellationTokenSource; cts.CancelAfterTimeSpan.From毫秒800; return wait requestexecutects.Token; }
您可以使用以下代码: //这样做可能不是个好主意。我如何改进下面的方法? 私有异步任务进程CassQueryFunc requestExecuter,字符串msg,其中T:class { 使用var cts=新的CancellationTokenSource; cts.CancelAfterTimeSpan.From毫秒800; return wait requestexecutects.Token; }
添加第二个任务怎么样?它只执行任务。延迟指定的时间量?你必须改变。什么时候改变。什么时候改变。然后,您可以检查返回的任务是否为超时任务,并相应地进行处理。这是否回答了您的问题@你的建议和下面安德烈的建议有什么不同?哪一个更好呢?添加第二个任务,它只执行任务。延迟指定的时间量?你必须改变。什么时候改变。什么时候改变。然后,您可以检查返回的任务是否为超时任务,并相应地进行处理。这是否回答了您的问题@你的建议和下面安德烈的建议有什么不同?哪一个更好?谢谢。是的,这个很好用。想知道这是不是让我的电话暂停的最好方式吗?我只是担心,因为我的方法将以非常高的吞吐量被调用。谢谢。是的,这个很好用。想知道这是不是让我的电话暂停的最好方式吗?我只是担心,因为我的方法将以非常高的吞吐量被调用。