C# 如果需要超过x毫秒,如何超时调用?

C# 如果需要超过x毫秒,如何超时调用?,c#,cancellationtokensource,C#,Cancellationtokensource,我正在使用C语言,并且正在从cassandra获取数据,所以我正在使用下面的代码,它从cassandra获取数据,并且工作正常 唯一的问题是我的ProcessCassQuery方法-我正在将CancellationToken.None传递给我的requestExecuter函数,这可能不是正确的做法 如果需要超过800毫秒,我需要超时查询,那么如何在这里正确使用CancellationToken来超时查询?Cassandra驱动程序还没有处理CancellationToken,所以我需要通过其他

我正在使用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; }
添加第二个任务怎么样?它只执行任务。延迟指定的时间量?你必须改变。什么时候改变。什么时候改变。然后,您可以检查返回的任务是否为超时任务,并相应地进行处理。这是否回答了您的问题@你的建议和下面安德烈的建议有什么不同?哪一个更好呢?添加第二个任务,它只执行任务。延迟指定的时间量?你必须改变。什么时候改变。什么时候改变。然后,您可以检查返回的任务是否为超时任务,并相应地进行处理。这是否回答了您的问题@你的建议和下面安德烈的建议有什么不同?哪一个更好?谢谢。是的,这个很好用。想知道这是不是让我的电话暂停的最好方式吗?我只是担心,因为我的方法将以非常高的吞吐量被调用。谢谢。是的,这个很好用。想知道这是不是让我的电话暂停的最好方式吗?我只是担心,因为我的方法将以非常高的吞吐量被调用。