services.msc tworzy pętle w threadach:
foreach (DataRow dr in dt.Rows)
{
int loopId = Convert.ToInt32(dr[0]);
string threadName = "loop_" + loopId.ToString();
Thread thread = new Thread(delegate () { MainLoop.RunLoop(loopId); });
thread.Name = threadName;
thread.Start();
System.Threading.Thread.Sleep(100 * 1);
}
To działa dobrze, ale "RunLoop" używa tasków do http post:
var content = new StringContent(json, Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
string receiveStream;
var task = Task.Run(() => client.PostAsync(url, content));
task.Wait(); //task is null here
var response = task.Result;
httpRes = response.StatusCode.ToString();
receiveStream = response.Content.ReadAsStringAsync().Result;
receiveStream = receiveStream.Replace("\\/", "/");
Gdy uruchamiam ręcznie pojedyńczą pętlę wszystko działa okej - task nie jest nullem.
Gdy uruchamiam MainLoop z services.msc task ma wartość null (//task is null here) i mam błąd "odwołanie obiektu nie zostało ustawione na wystąpienie obiektu".
Nie mogę zrozumieć przyczyny problemu. Wygląda jakby thready się gryzły. Próbowałem przebudować taska na "async/await", ale to nie pomogło.
Z góry dziękuję za pomoc.