在异步模式下,顾名思义,客户端在后台线程中异步运行请求。
执行以下代码时,ContentAsString失败,因为此时请求未完成。
output := httpclient.Get('https://google.com').ContentAsString
如果要在异步模式下使用 HTTP 客户端,则必须在请求完成后使用完成处理程序来运行适当的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
httpclient: TNetHTTPClient;
begin
httpclient := TNetHTTPClient.Create(nil);
httpclient.Asynchronous := True;
httpclient.OnRequestCompleted := HTTPRequestCompleted;
httpclient.Get('https://google.com');
end;
procedure TForm1.HTTPRequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse);
var
output: string;
begin
output := AResponse.ContentAsString;
Sender.Free;
end;
在异步模式下使用 HTTP 客户端通常比从后台线程在同步模式下使用它更复杂(特别是从内存管理方面)。
以下是使用匿名后台线程的等效示例:
procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure
var
httpclient: TNetHTTPClient;
output: string;
begin
httpclient := TNetHTTPClient.Create(nil);
try
httpclient.Asynchronous := False;
output := httpclient.Get('https://google.com').ContentAsString;
finally
httpclient.Free;
end;
end).Start;
end;
当然,您也可以使用TTask或自定义线程来代替匿名线程。
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.084750175476074 seconds