相关疑难解决方法(0)

不使用异步方法更新Struct的私有字段值

我刚刚在结构中使用异步方法遇到了一个奇怪的行为.有人可以解释为什么会这样,最重要的是如果有解决方法吗?这是一个简单的测试结构,仅仅是为了演示问题

public struct Structure 
{
   private int _Value;

   public Structure(int iValue) 
   {
      _Value = iValue;
   }

   public void Change(int iValue)
   {
      _Value = iValue;
   }

   public async Task ChangeAsync(int iValue)
   {
      await Task.Delay(1);
      _Value = iValue;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,让我们使用该结构并执行以下调用

var sInstance = new Structure(25);
sInstance.Change(35);
await sInstance.ChangeAsync(45);
Run Code Online (Sandbox Code Playgroud)

第一行实例化结构,sInstance._Value值为25.第二行更新sInstance._Value值,它变为35.现在第三行没有做任何事情,但我希望它能更新sInstance._Value45而不是sInstance._Value停留35.为什么?有没有办法为结构编写异步方法并更改结构字段的值?

c# struct asynchronous async-await

15
推荐指数
1
解决办法
507
查看次数

DebuggerStepThrough,DebuggerHidden在async-await方法中不起作用

当您在Visual Studio调试器中打开"抛出异常时断开"功能时,它会在选定的异常类型的任何位置中断.告诉它不要破解特定方法的方法是DebuggerStepThrough属性(或DebuggerHidden)装饰这些方法.

这,显然,没有一个工作async由于某种原因的方法.这是一个重现问题的片段.调试器打破内TestAsync,即使它标明的属性,它会不会打破里面Test的除外(它们之间唯一的区别是第一个标有async关键字):

public class Attributes
{
    public async Task Run()
    {
        await TestAsync();
        await Test();
    }

    [DebuggerHidden]
    [DebuggerStepThrough]
    public async Task TestAsync()
    {
        try
        {
            throw new Exception("Async");
        }
        catch
        {
        }
        await Task.Delay(100);
    }

    [DebuggerHidden]
    [DebuggerStepThrough]
    public Task Test()
    {
        try
        {
            throw new Exception("sync");
        }
        catch
        {
        }
        return Task.Delay(100);
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,这种行为是有意的吗?这是一个错误吗?有解决方法吗?

.net c# debugging exception-handling async-await

11
推荐指数
1
解决办法
1085
查看次数