c# - .Net 核心不支持 AsyncResult
问题描述
我正在将 MVC 应用程序迁移到 .NET Core 中,我必须对解决方法AsyncResult
类进行代码更改
错误:找不到类型或命名空间名称“AsyncResult”(您是否缺少 using 指令或程序集引用?)
delegate void CopyMemoryStreamToFileDelegate(MemoryStream memorystream, string path);
public static bool SaveXmlIndentedAsync(XmlDocument doc, string path)
{
XmlTextWriter writer = null;
MemoryStream memorystream = new MemoryStream();
CopyMemoryStreamToFileDelegate copyDelegate;
Xmlattributes attribute = doc.CreateAtteibute("datetime");
attribute.Value = DateTime.Now.ToString();
doc.DocumentElement.Attributes.Append(attribute);
writer = new XmlTextWriter(memorystream, Encoding.UTF8);
writer.IndentChar = '\t';
writer.Formating = Formatting.Indented;
doc.Save(writer);
// Instantiated the call & callback delegates
copydelegate = new CopyMemoryStreamToFileDelegate(CopyMemoryStreamToFile);
//From here I'm calling below CopyCallback function
AsyncCallback callback = new AsyncCallback(CopyCallback);
}
private static void CopyCallback(IAsyncResult ar)
{
CopyMemoryStreamToFileDelegate copydelegate;
try
{
//Get the asyncresult
AsyncResult aResult = (AsyncResult)ar;// here I'm getting error Asyncresult
//Get the delegate that has fired the beginInvoke
copyDelegate = aResult.AsyncDelegate as
CopyMemoryStreamToFileDelegate;
if (copyDelegate == null) return;
//End Envoke
copyDelegate.EndInvoke(ar);
}
catch(Exception ex)
{
Log.error(null, "copycallback: CopyMemoryStreamToFile throw ana exception", ex);
}
}
private static void CopyMemoryStreamToFile(MemoryStream memorystream, string path)
{
FileStream filestream =null;
filestream = new FileStream(path,FileMode.Create);
byte[] buffer = memorystream.ToArray();
filestream.write(buffer,0,buffer.Length);
}
经过基础研究,我发现 .net 核心中不存在 asyncResult。我正在尝试实现 Using Task Run 和 async/await 但不自信。能否请您提供代码更改解决方案,谢谢。
解决方案
如果我正确理解您的问题,那么您想以MemoryStream
异步方式将数据从 a 复制到文件中。
public static async Task SaveXmlIndentedAsync(XmlDocument doc, string path)
{
XmlTextWriter writer = null;
MemoryStream memorystream = new MemoryStream();
Xmlattributes attribute = doc.CreateAtteibute("datetime");
attribute.Value = DateTime.Now.ToString();
doc.DocumentElement.Attributes.Append(attribute);
writer = new XmlTextWriter(memorystream, Encoding.UTF8);
writer.IndentChar = '\t';
writer.Formating = Formatting.Indented;
doc.Save(writer);
using var filestream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true);
memorystream.Position = 0;
await memorystream.CopyToAsync(fileStream);
}
- 打开 FileStream 进行异步写入
- 将 memoryStream 的位置设置为开头
- 将 memoryStream 复制到文件流中
我已将签名从更改static bool
为static async Task
能够使用await
我还没有测试过代码,所以FlushAsync
可能需要在CopyToAsync
.
推荐阅读
- excel - 根据单元格值显示/隐藏列
- python - 正则表达式/Beautifulsoup HTML 解析
- c - C中系统调用的奇怪行为
- javascript - 如何转换嵌入了 URL 编码的 URL?
- javascript - JavaScript/Chrome 扩展在第二个插槽中打开一个新选项卡
- javascript - 挣扎于布局(使用 styled-components )
- python - mypy 类型和可选过滤
- python - AttributeError: 'KerasTensor' 对象没有属性'尺寸与拥抱脸bert.AutoModel 模型与张量流
- typescript - 如何提取枚举成员而不重复?
- java - Mockito Junit 无法模拟呼叫