• 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.

Mały hosting, OGROMNE możliwości
0 głosów
259 wizyt
pytanie zadane 26 listopada 2018 w C# przez kubekszklany Gaduła (3,250 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 Mentor (354,880 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,250 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,743 wizyt
pytanie zadane 18 kwietnia 2015 w C# przez Dorion300 Szeryf (90,250 p.)
0 głosów
1 odpowiedź 506 wizyt
pytanie zadane 8 lipca 2018 w C# przez PięćCzySześć Użytkownik (770 p.)
+1 głos
2 odpowiedzi 1,289 wizyt
pytanie zadane 2 lipca 2021 w C# przez tomasz12345 Użytkownik (750 p.)

93,718 zapytań

142,631 odpowiedzi

323,262 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...