Entschuldigung für den Namen meines Posts, aber ich werde versuchen, mein Problem zu erklären.Erstellen Sie eine Client-Bibliothek mit sicherem Threading, um eine Verbindung mit einer externen API herzustellen
Ich baue eine Client-Bibliothek, um eine externe API anzufordern, und ich versuche herauszufinden, wie die Methoden meiner Bibliothek Safe-Threading gemacht werden.
Grundsätzlich ist die Hauptklasse von meiner Bibliothek sieht wie folgt aus:
public class MyCompanyApiClient
{
private readonly HttpClient _httpClient;
public MyCompanyApiClient(string baseUrl)
{
_httpClient = new HttpClient() {BaseAddress = new Uri(baseUrl)};
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<MyClassB> PostData(int id, MyClassA dataToPost)
{
var request = new HttpRequestMessage(HttpMethod.Post, $"objects/{id}");
request.Content = new StringContent(JsonConvert.SerializeObject(dataToPost), Encoding.UTF8,
"application/json");
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var stringContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<MyClassB>(stringContent);
}
public async Task<MyClassA > GetById(int id)
{
...
}
}
Ich mag würde, um sicherzustellen, dass alle Instanz Mitglieder meiner Client-Klasse sind sicher Thread.
Im Moment plane ich den Code in jeder Methode in eine Task.Run
zu wickeln:
public async Task<MyClassB> PostData(int id, MyClassA dataToPost)
{
return await Task.Run(async() =>
{
var request = new HttpRequestMessage(HttpMethod.Post, $"objects/{id}");
request.Content = new StringContent(JsonConvert.SerializeObject(dataToPost), Encoding.UTF8,
"application/json");
var response = await _httpClient.SendAsync(request);
var stringContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<MyClassB>(stringContent);
});
}
Durch die Art, wie ich weiß nicht einmal, ob es diese Methode wird, um eine sichere Thread zu sein.
Jede Hilfe aprreciated ^^
Es scheint überhaupt kein Threading-Problem zu geben. Was versuchst du zu lösen? –
Diese Klasse wird in einem azurblauen Webjob verwendet, der eine große Menge an Nachrichten von einem Eventhub verarbeitet, und ich möchte sicherstellen, dass ich kein Problem mit Safe-Threading habe, aber ich überlege das Problem. – Thomas
@Thomas Es ist * thread-safe *, nicht * safe-thread * –