在C#中使用信号量和超时异步调用WebMethod

问题描述

我是不熟悉基于Web的C#编程和异步WebMethod调用的人。我读过几篇文章,但找不到任何有效的方法

如果我有100个Web服务方法调用,而我想同时异步调用10个方法,该怎么办。等待每个WebMethod响应5000毫秒,如果响应没有在5000毫秒内到达,则提供超时,并且基于这10次调用的信号量释放,我将从其余WebMethod中调用方法

实现这种情况的最佳方法是什么?

样本: 我只显示了1个示例方法,但是这种方式我必须异步调用100多个方法

     SemaphoreSlim Semaphore = new SemaphoreSlim(0,10);
    
    //Register method
    soapClient.MethodNameCompleted += soapClient_MethodNameCompleted;
    
    //Call method async
    MethodNameAsync();
    Semaphore.Wait()
    
//This method calls only when WebMethod send a response
    void soapClient_MethodNameCompleted(object sender,MethodNameCompletedEventArgs e)
            {
                string result = e.Result.ToString();
                Semaphore.Release();
            }

解决方法

可能是中间件可以帮助您。例如:

newDirectory.then(function(result){
    return getAllFiles('/TestDir').then((result) => {
       ...
    });
}).then(() => {
    console.log('doing some other task');
});

ASP.NET核心中间件https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...