You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
3.5 KiB
170 lines
3.5 KiB
using ConsoleApp;
|
|
#if false
|
|
class ThreadTest3
|
|
{
|
|
// Member variablen werden automatisch initialisiert
|
|
// lokale nicht
|
|
// Csharp compiler gibt einen Error aus, wenn die Variable nicht initialisiert wird
|
|
private bool done;
|
|
static void Main()
|
|
{
|
|
ThreadTest3 tt = new ThreadTest3();
|
|
new Thread(tt.Go).Start();
|
|
tt.Go();
|
|
}
|
|
void Go()
|
|
{
|
|
if (!done)
|
|
{
|
|
// Thread.Sleep(10); ==> proviziert error
|
|
done = true;
|
|
Console.WriteLine("Done");
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if false
|
|
class ThreadTest7
|
|
{
|
|
|
|
static void Main()
|
|
{
|
|
AdditionTask work1 = new AdditionTask("A", 100000000);
|
|
AdditionTask work2 = new AdditionTask("B", 100000);
|
|
AdditionTask work3 = new AdditionTask("C", 100);
|
|
Thread t1 = new Thread(work1.Add);
|
|
Thread t2 = new Thread(work2.Add);
|
|
Thread t3 = new Thread(work3.Add);
|
|
//t3.Priority = ThreadPriority.Lowest;
|
|
t1.Start();
|
|
t2.Start();
|
|
t3.Start();
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
#if false
|
|
class ThreadStop1
|
|
{
|
|
static void Main()
|
|
{
|
|
try
|
|
{
|
|
Thread thread1 = new Thread(Go);
|
|
thread1.Start();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Exception!");
|
|
}
|
|
}
|
|
|
|
private static void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
|
|
{
|
|
Console.WriteLine("Exception caught");
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
static void Go()
|
|
{
|
|
throw null; // NullReferenceException wird ausgelöst
|
|
Console.WriteLine("uups!");
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#if false
|
|
class ThreadStop2
|
|
{
|
|
static void Main()
|
|
{
|
|
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
|
new Thread(GoX).Start();
|
|
new Thread(GoY).Start();
|
|
Console.WriteLine("finished!");
|
|
}
|
|
|
|
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
|
{
|
|
Console.WriteLine("Unhandled exception " + e);
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
static void GoX()
|
|
{
|
|
try
|
|
{
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
Console.Write("X");
|
|
if (i == 2)
|
|
{
|
|
throw null; // NullReferenceException wird ausgelöst
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Exception! " + ex.Message);
|
|
}
|
|
}
|
|
|
|
static void GoY()
|
|
{
|
|
try
|
|
{
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
Console.Write("Y");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Exception! " + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
|
|
#if true
|
|
class SimpleBlocking
|
|
{
|
|
|
|
static void Main()
|
|
{
|
|
long sum = 0;
|
|
bool fertig = false;
|
|
Thread mainThread = Thread.CurrentThread; // main thread
|
|
|
|
Thread t = new Thread(delegate ()
|
|
{
|
|
for (int i = 0; i <= 1000; i++)
|
|
{
|
|
sum += i;
|
|
}
|
|
Console.WriteLine(mainThread.ThreadState);
|
|
fertig = true;
|
|
});
|
|
|
|
t.Start();
|
|
// Version 1 == zweitbeste Variante
|
|
//while (!fertig) { Thread.Sleep(10) };
|
|
|
|
// Version 2 == schlecht
|
|
//Thread.Sleep(10);
|
|
|
|
// Version 3 == beste Variante
|
|
t.Join(); // warten bis dieser Thread t beendet wurde
|
|
Console.WriteLine("Summe = " + sum);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif |