【发布时间】:2016-07-10 22:00:54
【问题描述】:
我是 web 服务的初学者,我跑进去了 以下问题是关于 web 服务和异步日志记录的。 (c#)
问题描述
我有一个向客户端(asp.net 网站)返回一些数据的网络服务。
[WebMethod]
public MyClass getData()
{
//Do some work
return _myClassObject;
}
到目前为止,这工作得很好。
因为我想知道网络服务发布后发生了什么,所以我尝试实现一些简单的日志记录。
以下类(简化)处理日志记录:
public static class Logwriter
{
public static void writeToLog(string txt)
{
//writes log to db
}
}
我希望这发生在异步,所以它不会减慢网络服务。
因此我更改了 WebMethod:
[WebMethod]
public async Task<MyClass> getData()
{
await Task.Run(() => Logwriter.writeToLog("Someone requested the WebMethod 'GetData'"));
//Do some work
return _myClassObject;
}
在我更新我的 asp.net 网站上的 ServiceReference 后,我注意到网络服务器不再返回“MyClass”-Object,而是“TaskOffCustomClass”-Object。我还没有找到从“TaskOffMyClass”-Object 中获取“MyClass”-Object 的解决方案。
问题
如何从“TaskOffMyClass”获取“MyClass”对象?
是否有可能进行异步记录并仍然返回“MyClass”-Object? (使用任务时)
我考虑过在线程中进行日志记录,但我也读到recommended 在线程上使用任务。切换到 Thread 的影响会有多严重?
【问题讨论】:
-
async和await并不像您认为的那样工作。您在上面的代码中所做的只是使其中的一些在不同的线程上运行,然后 wait 等待该线程在原始线程继续之前完成运行。我强烈建议您花更多时间了解async和await。 Eric Lippert 的博客中有大量文章对此进行了解释。 -
嗨@Damien_The_Unbliever,谢谢您的评论。我一定会看看 Eric Lipperts 的博客。
标签: c# web-services asynchronous async-await