获取互斥体后调用await操作[重复]

2023-11-29

如何使用写入文件await FileIO.WriteTextAsync()(在 Windows Phone 8.1 中)获取后mutex这样就不会有两个线程访问同一个文件并确保互斥。我正在执行以下操作:

mutex.WaitOne()

try
{
    await FileIO.WriteTextAsync(filename, text);
    Debug.WriteLine("written");
}
finally
{
    mutex.ReleaseMutex();
}

但该方法仅适用于一两次迭代,之后它会抛出一个System.Exception。另外,如果我删除await关键字或完全删除文件写入方法,代码运行得很好。所以,所有的麻烦都是由调用异步方法引起的。我可以做什么来解决这个问题?


这是监视器的工作(或者为了使其更加异步友好,信号量),而不是互斥锁。

问题是,继续WriteTextAsync可能在单独的线程上运行,所以它can't释放互斥体 - 这只能从最初获取互斥体的同一线程中完成。

var semaphore = new SemaphoreSlim(1);

await semaphore.WaitAsync();

try
{
    await FileIO.WriteTextAsync(filename, text);
    Debug.WriteLine("written");
}
finally
{
    semaphore.Release();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取互斥体后调用await操作[重复] 的相关文章

随机推荐

  • Django 模板和 MongoDB _id

    Variables and attributes may not begin with underscores value id 如何引用 idDjango 模板中从 MongoDB 获取的项目的数量 自定义模板过滤器有助于 from dj
  • jquery:.css 与附加到头部之间的速度差异?

    我们对内部应用程序有一些笨拙的解决方法 我想知道哪种 jQuery css 技术被认为更快 更高效 等等 技术A使用 css doc css margin top 90px checkouthelp css margin 50px 50px
  • 了解 Python 中的 for 循环

    我正在尝试创建一个for循环 我遇到了问题 我不明白这些循环是如何工作的 我认为问题是因为我正在使用for语法错误 据我了解 一个for循环应该看起来像 for w in words print w len w But 它究竟是如何运作的
  • 将 PHP Unix 时间戳转换为 Javascript 时间戳格式

    我将 php 中的 unix 时间戳抛出到 javascript 中 我注意到 PHP 和 Javascript 时间戳与纪元不同 秒与毫秒 我基本上所做的就是回显 php unix 时间 然后添加 3 个零 简单地将其乘以 1000 但我
  • Excel UDF 到表中的数据块的逆透视(融化、反向透视、展平、标准化)

    这个问题将寻求多种方法LET LAMBDA VBA UDF and Power Query Function 因此不会有单一的正确答案 而是征集可供参考的方法 Scott提出了一个问题here关于反转包含数据块而不是单个数据点的复杂表 基本
  • 无法在 Angular 6 中添加 Bootstrap 4

    当我尝试添加最新的引导程序版本时遇到问题 npm install bootstrap 之后 当我尝试运行它时收到一条错误消息 ng serve open 我在 angular json 中添加 Bootstrap 像这样 styles no
  • Xamarin Forms PopAsync 崩溃

    我用 PCL 构建了一个 Xamarin 表单应用程序 应用程序有时会崩溃await Navigation PopAsync 我找到了这个https forums xamarin com discussion 62414 app resum
  • 通过分隔符将 T-SQL 字符串拆分为列?

    我有一个表 其中有一列使用连字符分隔的八个值集 其中一些为空白 我试图将此字符串拆分为列 每个值对应于分隔字符串的位置 Table1 Record StringValue rec1 422100 130 1034 10901 12000 r
  • 如何查看活动的 SQL Server 连接?

    我正在使用 SQL Server 2008 Enterprise 我想查看任何活动的 SQL Server 连接 以及所有连接的相关信息 例如来自哪个 IP 地址 连接到哪个数据库等等 是否有现有的命令可以解决这个问题 SELECT DB
  • 如何使用分类轴在条形图上叠加数据点

    Goal 我正在尝试使用 Seaborn 在带有多个分组条形图的图中显示各个数据点 Problem 我尝试使用条形图的猫图和各个数据点的猫图来完成此操作 但是 这会生成 2 个数字 一个包含条形图 另一个包含各个数据点 问题 有没有办法使用
  • 如何制作非矩形Winform?

    我正在使用下面的代码来更改 winform 的形状 它正在改变形状 但不是我想要的那样 我需要表格有弯角 我应该使用什么积分来获得它 public void MakeNonRectangularForm var p new Graphics
  • ms-access加载数据问题

    我有一个非常复杂的表格 如下所示 替代文本http img9 imageshack us img9 2465 test2xk jpg 然而 我的数据库中总共只有 8MB 的数据 它的工作方式是用所有记录名称一直填充左侧的列表框 当您滚动记录
  • 使用 SCALER_CROP_REGION 裁剪时 Camera2 预览会拉伸

    我想在以下位置显示预览全屏使用camera2 API 我选择的相机尺寸是4160x3120 16 9 我的屏幕是1080x1920 9 16 因此 如果我希望预览正确缩放 我必须裁剪相机输出 Rect zoomCrop new Rect 0
  • C4 保存图像的一部分

    嘿 我浏览了保存图像的示例 然后我只想保存屏幕的一部分 我设法保存从图像左上角开始的部分 但实际上我想保存屏幕的中心 仅保存图像的一部分的神奇之处在于设置具有特定大小的图形上下文 如下所示 UIGraphicsBeginImageConte
  • 从绑定项获取 ItemsControl 内的 DataGrid

    我有一个 ItemsControl 在其模板中使用 DataGrid 如下所示
  • Java正确处理异常

    对JAVA或异常处理不太熟悉 寻求一些关于什么是可以接受的 什么是不受欢迎的建议 该场景 我正在构建一个生命游戏程序 我设置了条件来检查单元格是否超出范围 并且不尝试访问该 单元格 我的问题是 使用 try catch 块代替 8 个条件是
  • 相对于页面上滚动位置的视觉计数器

    对于一个项目 我必须使用 html 和 javascript 制作一个可视计数器 相对于窗口的滚动位置从 150 倒数到 0 我不完全确定我应该如何去做这件事 但这是我到目前为止所拥有的 HTML span class meterCount
  • Nginx 位置指令中子目录的正则表达式或通配符

    我的开发人员将在本地计算机上编辑多个 Wordpress 站点 我想为他们设置一次 Nginx 而无需他们将来编辑配置文件 通常 当 Nginx 配置为托管 Wordpress 时 会包含如下位置块 location try files u
  • file_put_contents() 在尝试导出图像时发出错误

    我通过将多个图像复制到新图像中来创建图像 在程序的最后一步中 我尝试将此文件导出到文件夹中 代码如下
  • 获取互斥体后调用await操作[重复]

    这个问题在这里已经有答案了 如何使用写入文件await FileIO WriteTextAsync 在 Windows Phone 8 1 中 获取后mutex这样就不会有两个线程访问同一个文件并确保互斥 我正在执行以下操作 mutex W