我使用一个C#控制台应用程序来测试Httpclient GetSync()。
当代码在getsync()中运行并关闭时,我需要得到响应结果。线程和任务是在等待冲突,还是线程不是主线程?
我误用的代码。
Program.cs
using System;
using System.Threading;
using AutoProcessWorks;
_AutoProcessWorks autoProcessWorks = new _AutoProcessWorks();
Thread AutoRunThread = new Thread(new ThreadStart(autoProcessWorks.MainRun));
AutoRunThread.Start();AutoProcessWorks.cs来了
public class _AutoProcessWorks
{
Api api = new Api();
SqlTools sqlTools = new SqlTools();
public bool Switch_Run = true;
public void MainRun()
{
int sleep = 60000;
Api api = new Api();
while (Switch_Run)
{
var route = "IsNFTContractEnough";
var res = api.CallPythonApiGet(route);
Console.WriteLine(res);
Switch_Run = false;
}
}
public class Api
{
public async Task<string> CallPythonApiGet(string route)
{
const string uri = "http://127.0.0.1:5000/";
using (HttpClient client = new HttpClient())
{
var respones_result = "";
try
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(600);
var response = await client.GetAsync(uri + route);
respones_result = response.Content.ReadAsStringAsync().Result;
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
catch (HttpRequestException e)
{
var error = "";
error += respones_result + "\n\r";
error += "\nException Caught! Message :" + e.Message;
return error;
}
}
}
}发布于 2022-08-17 09:49:32
您到处都缺少await,不应该启动新线程,只需调用await MainRun()即可。
_AutoProcessWorks autoProcessWorks = new _AutoProcessWorks();
await autoProcessWorks.MainRun();public class _AutoProcessWorks
{
Api api = new Api();
SqlTools sqlTools = new SqlTools();
public bool Switch_Run = true;
public async Task MainRun()
{
int sleep = 60000;
Api api = new Api();
while (Switch_Run)
{
var route = "IsNFTContractEnough";
var res = await api.CallPythonApiGet(route);
Console.WriteLine(res);
Switch_Run = false;
}
}
}public class Api
{
static HttpClient client = new HttpClient(); // keep only one of these around
public async Task<string> CallPythonApiGet(string route)
{
const string uri = "http://127.0.0.1:5000/";
var respones_result = "";
try
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = TimeSpan.FromSeconds(600);
using var response = await client.GetAsync(uri + route);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
catch (HttpRequestException e)
{
var error = respones_result + "\n\r" + "\nException Caught! Message :" + e.Message;
return error;
}
}
}https://stackoverflow.com/questions/73386029
复制相似问题