相关疑难解决方法(0)

名为Mutex等待

因此我不能使用线程仿射锁async- 如何在运行多个进程时保护我的资源?

例如,我有两个使用以下任务的进程:

 public async Task<bool> MutexWithAsync()
 {
     using (Mutex myMutex = new Mutex(false, "My mutex Name"))
     {
         try
         {
             myMutex.WaitOne();
             await DoSomething();
             return true;
         }
         catch { return false; }
         finally { myMutex.ReleaseMutex(); }
     }
 }
Run Code Online (Sandbox Code Playgroud)

如果由Mutex保护的moethod是同步的,那么上面的代码将起作用,但async我会得到:

从不同步的代码块调用对象同步方法.

Named Mutex对异步代码没用吗?

c# multithreading asynchronous async-await

15
推荐指数
2
解决办法
8583
查看次数

C#中的互斥锁 - 来自非同步代码块的同步

我正在编写一个程序,从网站下载游戏作为zip存档并提取它们.由于所有游戏在被提取之前都被下载到同一位置,因此我在使用Mutex时可以防止同时进行两次下载时的竞争条件.问题是我得到一个System.ApplicationException抛出说:"对象同步方法是从一个不同步的代码块调用的." 我所看到的一切都说这是因为从不拥有它的线程中释放Mutex.但是,我的代码等待并在同一个线程中释放互斥锁.

await Task.Run(async () =>
{
   mutex.WaitOne();
   await DownloadGameAsync(ug, nvm);
   await ExtractGameAsync(ug, nvm);
   nvm.Action = "Done";
   mutex.ReleaseMutex();
});
Run Code Online (Sandbox Code Playgroud)

如果我在线上放置一个断点mutex.ReleaseMutex(); 并且跳过该行不会导致抛出异常,但是删除断点并正常运行会导致每次执行都出现异常.

我应该以不同的方式接近(信号量)还是使用async/await导致问题?

c# multithreading async-await

2
推荐指数
1
解决办法
1579
查看次数

Mutex ApplicationException when using async/await

I am trying to get the response from a url, and when I use the await and async in my function, my Mutex throws an error.

Error output :

System.ApplicationException
Object synchronization method was called from an unsynchronized block of code.
 at System.Threading.Mutex.ReleaseMutex()
Run Code Online (Sandbox Code Playgroud)

Code :

private async void getData ()
{
    _mutex.WaitOne();

    try
    {
        string url = "https://urllink.com";
        HttpClient client = new HttpClient();
        string response = await client.GetStringAsync(url);
    }
    catch (Exception e)
    {
        // TODO
        throw e;
    }
           
    _mutex.ReleaseMutex();
}
Run Code Online (Sandbox Code Playgroud)

c# mutex asynchronous httpclient async-await

0
推荐指数
1
解决办法
56
查看次数