Jaki jest pożytek z zadania.FromResult w C#
W C# i TPL ( Task Parallel Library) klasa Task
reprezentuje trwającą pracę, która wytwarza wartość typu T.
Chciałbym wiedzieć, co jest potrzebne do zadania.Metoda FromResult ?
To znaczy: w scenariuszu, w którym masz już wyprodukowaną wartość pod ręką, jaka jest potrzeba, aby zawinąć ją z powrotem do zadania?
Przychodzi mi na myśl tylko to, że jest używany jako adapter dla innych metod akceptujących instancję zadania.
5 answers
Są dwa typowe przypadki użycia, które znalazłem:
- Kiedy implementujesz interfejs, który umożliwia asynchroniczne wywołania, ale twoja implementacja jest synchroniczna.
- Kiedy stubujesz / wyśmiewasz kod asynchroniczny do testowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 00:40:47
Przykładem może być metoda wykorzystująca pamięć podręczną. Jeśli wynik jest już obliczony, możesz zwrócić ukończone zadanie z wartością (używając Task.FromResult
). Jeśli tak nie jest, to śmiało zwracasz zadanie reprezentujące trwającą pracę.
Przykład pamięci podręcznej: przykład pamięci podręcznej przy użyciu zadania.FromResult dla wstępnie obliczonych wartości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 13:41:10
Użyj go, gdy chcesz utworzyć metodę awaitable bez użycia słowa kluczowego async. Znalazłem ten przykład:
public class TextResult : IHttpActionResult
{
string _value;
HttpRequestMessage _request;
public TextResult(string value, HttpRequestMessage request)
{
_value = value;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
Tutaj tworzysz własną implementację interfejsu IHttpActionResult do wykorzystania w akcji Web Api. Oczekuje się, że metoda ExecuteAsync będzie asynchroniczna, ale nie musisz używać słowa kluczowego async, aby uczynić ją asynchroniczną i oczekiwalną. Ponieważ masz już wynik i nie musisz na nic czekać, lepiej użyć zadania.FromResult.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-03 15:31:54
Z MSDN:
Ta metoda jest przydatna podczas wykonywania operacji asynchronicznej, która zwraca obiekt zadania, a wynik tego obiektu zadania jest już obliczony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 14:26:20
Użyj zadania.FromResult, gdy chcesz mieć operację asynchroniczną, ale czasami wynik jest w ręku synchronicznie. Możesz znaleźć dobrą próbkę tutaj http://msdn.microsoft.com/en-us/library/hh228607.aspx .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 07:05:09