Mam jedną metodę asynchronicznej:Zalecana metoda podpis podczas zwracania danych wyjściowych z metody asynchronicznej?
public async Task<BitmapSource> GetBitmapAsync(double[] pixels);
powiedzmy, że również mają tę klasę:
public class PixelData
{
public double[] Pixels { get; }
}
Teraz chcę utworzyć metody ogólnospożywczy produkujący wyjście BitmapSource
metodą asynchroniczną powyżej robić Praca. Mogę wymyślić co najmniej trzy podejścia, aby to zrobić, ale nie jest dla mnie oczywiste, który powinienem wybrać z punktu widzenia wydajności i niezawodności.
Czy ktoś może poradzić; jakie są zalety i wady każdego z poniższych podejść?
Wariant A Tworzenie synchroniczny sposób, że zawraca Result
z Task
:
public BitmapSource GetBitmap(PixelData pixelData)
{
return GetBitmapAsync(pixelData.Pixels).Result;
}
Wariant B Tworzenie synchroniczny (lub jest asynchroniczny?), Która zwraca Task<BitmapSource>
:
public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
return GetBitmapAsync(pixelData.Pixels);
}
Wariant C Załóż asynchroniczną metodę jawnie używa await
:
public async Task<BitmapSource> GetBitmapAsync(PixelData pixelData)
{
return await GetBitmapAsync(pixelData.Pixels);
}
I chcesz, aby móc wywołać tej metody asynchronicznie również wygoda? Jeśli tak, z tego, co widzę na pierwszy rzut oka, dwie pierwsze opcje tego nie osiągną, tylko trzecia. –
Niekoniecznie (czy chcę wywoływać asynchronicznie metodę wygody), ale jeśli jest to najbardziej niezawodny/poprawny sposób, to tak. –
@AdamHouldsworth Przepraszam za moją niewiedzę w tej sprawie, ale czy opcja B będzie traktowana jako metoda synchroniczna _ dla pewnych_? Fakt, że zwraca 'zadanie", jest nieistotny w odniesieniu do (a) synchroniczności? –