Czy istnieje ładna, prosta metoda opóźnienia wywołania funkcji, pozwalając jednocześnie wątkowi kontynuować wykonywanie?
na przykład
public void foo()
{
// Do stuff!
// Delayed call to bar() after x number of ms
// Do more Stuff
}
public void bar()
{
// Only execute once foo has finished
}
Zdaję sobie sprawę, że można to osiągnąć za pomocą licznika czasu i programów obsługi zdarzeń, ale zastanawiałem się, czy istnieje standardowy sposób C #, aby to osiągnąć?
Jeśli ktoś jest ciekawy, powodem, dla którego jest to wymagane, jest to, że foo () i bar () są w różnych (singleton) klasach, które muszę nazywać się w wyjątkowych okolicznościach. Problem polega na tym, że odbywa się to podczas inicjalizacji, więc foo musi wywołać bar, który potrzebuje instancji klasy foo, która jest tworzona ... stąd opóźnione wywołanie bar (), aby upewnić się, że foo jest w pełni zainicjowane. Czytanie tego z powrotem prawie trąci złym projektem!
EDYTOWAĆ
Rozważę punkty dotyczące złego projektu! Od dawna myślałem, że może uda mi się ulepszyć system, jednak ta paskudna sytuacja występuje tylko wtedy, gdy zostanie zgłoszony wyjątek, we wszystkich innych przypadkach dwa singletony bardzo ładnie współistnieją. Myślę, że nie zamierzam mieszać z paskudnymi wzorami asynchronicznymi, raczej zamierzam refaktoryzować inicjalizację jednej z klas.