Http呼唤火,忘记没有线程

时间:2018-02-16 15:45:21

标签: c# http aws-lambda

我有一个长时间运行(通常是秒,但是......)Web端点。

此端点应由AWS Lambda定期触发。

如果我等待Lambda中的响应(C#实现),这将被视为Lambda时间,我将被收费。

没有机会改变端点的行为。

我需要使用C#请求端点并且不要等待响应,因此端点将被触发,但Lambda执行将完成

2 个答案:

答案 0 :(得分:0)

执行异步请求,但不要等待它。

答案 1 :(得分:0)

下面你可以找到一个如何实现这个的例子。

使用HttpListener进行了测试。如果您尝试从端点返回一些内容,它将失败,因为连接已经关闭。

const string endpoint = "http://localhost:8081/";

var promise = new TaskCompletionSource<bool>();

var task = Task.Factory.StartNew(() =>
{
    var request = WebRequest.Create(endpoint);
    request.ContentType = "application/json";
    request.Method = "POST";
    request.BeginGetRequestStream(x =>
    {
        var r = (HttpWebRequest) x.AsyncState;
        var stream = r.EndGetRequestStream(x);

        var buffer = Encoding.UTF8.GetBytes("{}");
        stream.Write(buffer, 0, buffer.Length);

        request.BeginGetResponse(y => { }, request);

        promise.SetResult(true);

    }, request);
});

promise.Task.Wait();