【发布时间】:2019-08-20 18:07:31
【问题描述】:
我有一个只有两行代码的天蓝色函数,首先是等待 Task.Delay(5000),其次是返回状态 Ok 给客户端。在 host.json 中设置了 maxOutstandingRequests 和 maxConcurrentRequests。 AF 在本地执行,我也尝试使用已部署的版本。当我尝试从同一个 HttpClient 发送多个请求时会出现问题,函数调用不会是异步的。每次调用的执行时间为 5、10、15、20 和 25 秒。当我使用 WebApi 而不是 AF(WebApi 控制器具有与 AF 相同的功能)运行相同的客户端代码时,每次调用的执行时间为 5 秒。我想知道如何使用 Azure 函数获得与使用 WebApi 相同的行为?
下面我提供了客户的代码。
class Program
{
private static System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
static void Main(string[] args)
{
IEnumerable<TimeSpan> result = Test(10);
Console.WriteLine(string.Join("\n", result));
Console.ReadLine();
}
private static IEnumerable<TimeSpan> Test(int taskCount)
{
Task<TimeSpan>[] tasks = new Task<TimeSpan>[taskCount];
for (int i = 0; i < taskCount; i++)
tasks[i] = Send();
Task.WaitAll(tasks);
return tasks.Select(t => t.Result);
}
private static async Task<TimeSpan> Send()
{
using (var request = new HttpRequestMessage(HttpMethod.Post, ConfigurationManager.AppSettings["AF"]))
{
Stopwatch sw = new Stopwatch();
sw.Start();
using (var response = await httpClient.SendAsync(request))
{
sw.Stop();
return sw.Elapsed;
}
}
}
}
【问题讨论】:
-
函数中的代码长什么样?
-
还有
maxOutstandingRequests和maxConcurrentRequest的值? -
@Turbo public static async Task
Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "AF")]HttpRequestMessage req, TraceWriter log) { await Task .延迟(5 * 1000);返回 req.CreateResponse(HttpStatusCode.OK); } -
@Turbo 值为 50
标签: c# azure-functions httpclient