异步调用在Windows服务中挂起,相同的代码不会在控制台应用程序中挂起

时间:2015-02-27 04:45:05

标签: c# google-drive-api async-await

我有以下方法,它存在于Windows服务引用的程序集中。该服务使用FileSystemWatcher等待删除文件。当一个新文件到达时,会应用一些逻辑(如果有帮助的话,那么逻辑是检查一个文件是否已存在于Google Drive中,其名称与刚删除的文件同名。如果是,则现有文件为Trashed并且新删除的文件最终将在转换为Google格式后取而代之。最后,服务使用我编写的包装器连接到Drive API(此包装器在下面的方法中命名为'service')。

问题是,当我从Console应用程序使用同一个程序集时,它可以正常工作。当服务运行时,它会进入//调试注释下的两个日志记录语句,然后挂起。

我的问题:如何弄清楚为什么这段代码会在服务中而不是在控制台应用中挂起?

private async Task<bool> RunConverter( JobLogging logging ) {
            try {
                logging.Log( "Converting file", JobLogging.Verbosity.Information );
                var service = new Service( _clientID, _clientSecret );

                // debugging
                logging.Log( "ClientID: " + _clientID, JobLogging.Verbosity.All );
                logging.Log( "ClientSecret: " + _clientSecret, JobLogging.Verbosity.All );

                await service.Connect();
                logging.Log( "Service connected", JobLogging.Verbosity.All );

                // convert and make files public 
                var fileCount = await service.ConvertFiles( logging );

                if ( fileCount > 0 ) ClearPPTX( logging );
                return true;
            }
            catch ( Exception ex ) {
                logging.Log( "Exception during File Conversion: " + ex.Message, JobLogging.Verbosity.Critical, true );
                return false;
            }
        }

0 个答案:

没有答案