我应该解除随机异步工作代码吗?

B. *_*non 0 c# http-post filestream task-parallel-library async-await

我有一些有时可以工作的异步代码,有时却没有.使用此代码,始终会创建文件,但有时它是空的(我总是发送包含内容的文件):

[HttpPost]
[Route("api/inventory/sendxml/{userId}/{pwd}/{filename}")]
public async void SendInventoryXML(String userId, String pwd, String fileName)
{
    Task task = Request.Content.ReadAsStreamAsync().ContinueWith(t =>
    {
        var stream = t.Result;
        using (FileStream fileStream = File.Create(String.Format(@"C:\HDP\{0}.xml", fileName), (int)stream.Length))
        {
            byte[] bytesInStream = new byte[stream.Length];
            stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
            fileStream.Write(bytesInStream, 0, bytesInStream.Length);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

那么,我是否应该取消同步这个随机工作的代码,如果是的话,如何(如果没有不同步的变幻无常的事情(假设是导致这种随机行为的问题)将会完成同样的事情)?

Bed*_*ord 5

您是否尝试过使用await关键字?我的猜测是,当SendInventoryXML方法完成后,Request对象被释放.它会在您调用ReadStreamAsync()方法后立即完成(无需等待它完成).await关键字将强制它等待结果.

[HttpPost]
[Route("api/inventory/sendxml/{userId}/{pwd}/{filename}")]
public async void SendInventoryXML(String userId, String pwd, String fileName)
{
    var stream = await Request.Content.ReadAsStreamAsync();
    using (FileStream fileStream = File.Create(String.Format(@"C:\HDP\{0}.xml", fileName), (int)stream.Length))
    {
        byte[] bytesInStream = new byte[stream.Length];
        stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
        fileStream.Write(bytesInStream, 0, bytesInStream.Length);
    }
}
Run Code Online (Sandbox Code Playgroud)