0

Daily Challenge #9

Cześć! Dzisiaj w cyklu Daily Challenge prezentuję zadanie od Apple. Nie wiem, czy Apple trzyma taki poziom, czy ten ich język jest “dziwny”, ale implementację tego zadania w C# wyceniłem na 1 gwiazdkę.

Tak jak zawsze, kod jest dostępny na GitHubie.

Wpis ten należy do cyklu Daily Challenge. W cyklu tym rozwiązuję każdego dnia nowe zadanie. Zadanie te traktuję w taki sposób, jakbym dostał je na rozmowie kwalifikacyjnej i miał coś wymyślić. Implementuję pierwszą myśl jaka przyjdzie mi do głowy. Nie musi być ona (zazwyczaj nie będzie) najlepszym rozwiązaniem. Chodzi po prostu o zabawę i sprawdzenie jakbym sobie poradził z podobnym wyzwaniem. Zaimplementowane rozwiązanie nie jest z reguły tłumaczone, jeżeli masz pytania możesz je zadawać w komentarzach. Wszystkie zadania udostępniane są subskrybentom Daily Coding Problem.

Zadanie

Dzisiejsze zadanie brzmi następująco:

Implement a job scheduler which takes in a function f and an integer n, and calls f after n milliseconds.

Trochę śmiech na sali :), ale co tam, implementujemy.

Implementacja

Jest to pierwsze zadanie, do którego nie napisałem testów. Powodem tego jest to, że pisanie testów do różnego rodzaju delayów jest sztuką, a nie chciałem poświęcać wielokrotnie więcej czasu na testy, niżeli na banalną implementację. Twórca zadanie nie sprecyzował, czy mamy poczekać na wykonanie w tym samym wątku, czy mamy ją odpalić i zapomnieć. Zaimplementowałem dwie wersje:

public async Task Proceed(Action action, int delayMS, CancellationToken token)
{
    if (delayMS < 0)
    {
        throw new ArgumentOutOfRangeException();
    }
    await Task.Delay(delayMS, token);
    action();
}
 
public Task Proceed2(Action action, int delayMS, CancellationToken token)
{
    if (delayMS < 0)
    {
        throw new ArgumentOutOfRangeException();
    }
    return Task.Factory.StartNew(async () =>
    {
        await Task.Delay(delayMS, token);
        action();
    }, token);
}

Mission Complete

Nie ma co komentować, zadanie trywialne. Tak jak wspominałem na wstępie, może w innym języku to byłby problem, w C# niekoniecznie.

Jeżeli Ty chciałbyś podesłać jakieś ciekawe zadanie, to nie krępuj się proszę i ślij na p.bogdanski@devmight.pl. Pamiętaj, że zadanie powinno nadawać się na rozmowę kwalifikacyjną, więc nie może to być problem, którego rozwiązanie zajmuje kilka godzin. Dzięki!

Pozdro!

Patryk Bogdański

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.