我希望将同步方法包装成异步代码,以便将这些方法公开为异步 - 原因是我不想在同步方法中复制代码,因为我希望它是DRY并且已经知道了这些功能syunchronous代码的工作原理 - 不需要管理单独的方法。但是我想要异步方法。我理解异步方法的目的,至少他们做了什么以及为什么我想要使用它们。
请考虑以下代码:
public int AddValues(int a, int b)
{
// some really boring or extremely long DRY method code
return a + b;
}
添加如下的异步调用方法 节省编写代码的时间;确保内部代码的功能与同步代码相同。 我可以或者我应该这样做吗?:
public async task AddValuesAsync(int a, int b)
{
return await Task.FromResult(AddValues(a,b));
}
这是我的另一个问题,也许是对我的回答; 两次调用Asynch方法也会调用sync方法 - 因为它在异步后面,我可以得到一个跨线程异常?这是正确的。
那么在这种情况下我该怎么做 - 如何保持干爽并保持简单? 我可以将sync方法设为私有,并强制对该方法的所有调用都是Async ..
如果你说我的示例代码是一种不好的方法,请提供一个简短的原因和一个简单的例子来做一个好的方法..以及关于什么是最好的以及如何做的任何建议?< / p>
我看过这里 Is wrapping a synchronous call in a Task.Run() to make it asynchronous beneficial? 但这似乎并没有很清楚地回答,我想知道的。
修改
对于正在寻找的其他人 - 除了这里标记的答案之外,还有通过示例指出答案的信息,更重要的是为什么。
Should I expose asynchronous wrappers for synchronous methods?
Which way is best for wrapping synchronous code into an asynchronous method?
答案 0 :(得分:3)
答案 1 :(得分:0)
经过Stephen Cleary的评论后,我找到了相关的链接.. What is the best way for wrapping synchronous code into asynchronous method
虽然没有完全措辞 - 但有一条评论包含一篇文章链接,该文章完全针对我的问题的一个方面。
Yuval Itzchakov的评论包含了这一点。 &#34; Stephan Toub撰写了一篇名为Should I expose asynchronous wrappers for synchronous methods?的文章,讲述了不做你想做的事情的所有理由。我建议阅读它。&#34;