• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Freeze po kilku task runach.

Object Storage Arubacloud
0 głosów
117 wizyt
pytanie zadane 26 listopada 2018 w C# przez kubekszklany Gaduła (3,190 p.)

Witam. Mam problem z programem c#. Jest to tylko wycinek programu, ale testowałem dokładnie ten sam wycinek i dalej jest to samo. Jak ustawię RepeatNumber na 1 działa elegancko, jak ustawię na 10 jest freeze ok. 15 sekund, jak ustawie na 50 to już w ogóle brak odpowiedzi, a potrzebuję aż 125. Natomiast jak usunę Thread.Sleep(1000); bo testowałem bez tego to dostaję StackOverflow Exception. Dodam że nawet przy RepeatNumber na 10 czy 50 napis "done" dostaję od razu po uruchomieniu programu. 

void main()
{
    int RepeatNumber = 10;
    for (int i = 0; i < RepeatNumber; i++)
    {
        MyFunction();
    }
    Console.write("done");
}

void MyFunction()
{
  Task.Run(() => MyLoop());
}

void MyLoop();
{
    Thread.Sleep(1000);
    MyLoop();
}
komentarz 26 listopada 2018 przez adrian17 Ekspert (344,860 p.)

ale testowałem dokładnie ten sam wycinek i dalej jest to samo

To nie ma nawet prawa się skompilować - średnik na linii 16, `write` (mała litera), `main` też, plus nie jest `static`...

Wrzuć proszę wycinek, który faktycznie testowałeś.

Natomiast jak usunę Thread.Sleep(1000); bo testowałem bez tego to dostaję StackOverflow Exception

No tak, bo masz nieskończoną rekurencję.

komentarz 26 listopada 2018 przez kubekszklany Gaduła (3,190 p.)

Dobra, chciałem jakoś to uprościć, ale chyba nie do końca dobrze kod napisałem. Tym razem naprawdę ten kod który testowałem, tylko żeby go uruchomić to trzeba mieć server rage multiplayer, dlatego chciałem tego uniknąć.

[ServerEvent(Event.ResourceStart)]
public void OnResourceStart()
{
    for (int i = 0; i < 100; i++)
    {
        GenerujTowar(true);
    }

    for (int i = 0; i < 25; i++)
    {
        GenerujTowar(false);
    }

    NAPI.Util.ConsoleOutput("Done spawning trucks!");
}

void GenerujTowar(bool IsTrailer)
{
    // Zakomentowany Kod
    
    Task.Run(() => OdliczajCzas());
}

void OdliczajCzas()
{
    bool DalejOdliczac = true;
    
    // Zakomentowany kod
    
    if (DalejOdliczac)
    {
        Thread.Sleep(1000);
        OdliczajCzas();
    }
}

Dodam jeszcze tyle że nie jest to nieskończone, DalejOdliczac przyjmuje wartość false, gdy upłynie czas, ok 5 minut.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 1,355 wizyt
pytanie zadane 18 kwietnia 2015 w C# przez Dorion300 Szeryf (90,250 p.)
0 głosów
1 odpowiedź 277 wizyt
pytanie zadane 8 lipca 2018 w C# przez PięćCzySześć Użytkownik (770 p.)
+1 głos
2 odpowiedzi 637 wizyt
pytanie zadane 2 lipca 2021 w C# przez tomasz12345 Użytkownik (750 p.)

92,539 zapytań

141,382 odpowiedzi

319,479 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...