Using не вызывает Dispose - C#
Формулировка задачи:
Написал свой Mutex, теперь хочу чтобы он работал с конструкцией using, унаследовал интерфейс Idisposable, переопределили метод Dispose, но Dispose не вызывается. В чем может быть проблема? Заранее спасибо.
public class Mute:IDisposable
{
LinkedList<Task> coldTasks = new LinkedList<Task>(new[] { Task.Factory.StartNew(() => { }) });
public Task Lock()
{
Console.WriteLine("-------------------------------------------------");
Task ret = coldTasks.Last.Value;
coldTasks.AddLast(new Task(() => { }));
return ret;
}
protected virtual void Dispose(bool disposing)
{
}
public void Dispose()
{
Console.WriteLine("hjfkhjfhuf");
Release();
Dispose(true);
}
public void Release()
{
Console.WriteLine("++++++++++++++++++++++++++++++++++++++");
coldTasks.RemoveFirst();
Task first = coldTasks.First.Value;
first.Start();
}
public Task LockSection()
{
return Lock();
}
public void Test(){
Mute MuTex = new Mute();
Thread tr = new Thread(() => Inc(MuTex));
tr.Start();
Thread td = new Thread(() => Inc(MuTex));
td.Start();
}
int count = 0;
private async void Inc(Mute m)
{
count = 0;
//using (await MuTex.LockSection())
//{
// for (int i = 0; i < 10; i++)
// {
// count++;
// Console.WriteLine(count);
// }
//}
using (m.LockSection())
{
for (int i = 0; i < 100; i++)
{
count++;
Console.WriteLine(count);
}
}
//await MuTex.Lock();
//for (int i = 0; i < 100; i++)
//{
// count++;
// Console.WriteLine(count);
//}
//MuTex.Release();
}Решение задачи: «Using не вызывает Dispose»
textual
Листинг программы
public Task LockSection()
{
Task t=Lock();
return t;
}