함대에서 차량의 GPS 위치를 요청하는 API 게시물을 보낼 수있는 올바른 아키텍처를 제안하려고합니다. 목적은 상태에 대한 10 개 이상의 요청을 폭발시킨 다음 각 스레드가 응답을 기다린 다음 그 결과를 데이터베이스 테이블에 삽입하는 것입니다. 요청과 응답은 Json입니다. 한 번에 하나씩 코드가 동 기적으로 작동하므로 차량 당 2 분이 소요될 수 있습니다. 내 코드는 다음과 같습니다ASP.NET C# API에 게시하고 상태를 병렬로 기다립니다.
클라이언트 측 자바 스크립트 타이머는이 btnGetData_Click에게 제출 트리거
는btnGetData_Click이 DoVehicleGetStatus()를 호출 다음 await를 타격 한 후
public static async Task DoVehiclePollStatus()
int vehicleInfoId;
string vehicleVIN;
string vehicleMileage;
string tokenId;
// Build DataSet with list of vehicle information needed to log in.
// Loop thru each Vehicle.
int iCount = ds.Tables[0].Rows.Count;
foreach (DataRow dr in ds.Tables[0].Rows)
{
vehicleInfoId = Convert.ToInt32(dr["Id"]);
vehicleVIN = dr["VehicleVIN"].ToString();
vehicleMileage = dr["VehicleListMileage"].ToString();
tokenId = dr["VehicleListToken"].ToString();
// Serialize LoginInfo to Json
DataClass.GetStatusRequestBodyStruct getFromVehicle = new DataClass.GetStatusRequestBodyStruct();
getFromVehicle.getFromVehicle = true;
string requestJsonMessage = new JavaScriptSerializer().Serialize(getFromVehicle);
DataClass.GetVehicleStatusStruct vs = new DataClass.GetVehicleStatusStruct();
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type","application/json");
StringContent httpContent = new StringContent(requestJsonMessage);
// Set Header Parameters
try
{
httpContent.Headers.TryAddWithoutValidation("tokenId", tokenId);
httpContent.Headers.TryAddWithoutValidation("VIN", vehicleVIN);
HttpResponseMessage response = await httpClient.PostAsync(new Uri(DataClass.API_URIGetVehicleStatus), httpContent);
}
catch (Exception ex)
{
errorMessage = ex.Message;
}
....
..save response (string) data in database...
을 httpClient.PostAsync 프로그램 실행을 반환하고 나는 결코 요청 게시물의 응답을 되돌립니다. 이 디자인이 올바르지 않은 경우 더 나은 방법을 제안 해주십시오.
감사합니다. 정적 비동기 작업을 사용하여 일부 하위 메서드를 다시 작성한 후 DoVehiclePollStatus()는 훌륭하게 작동합니다. 나는 10+ 차량을 조사 할 수 있고 2 분 이내에 모든 응답을 되돌릴 수있다. 20를 위해 연속적으로 기다리지 않는! 나는 프로그래밍을 좋아한다! – IrvineCAGuy