C++ 异步调用后删除指针

C++ 异步调用后删除指针,c++,azure,visual-c++,concurrency,azure-storage,C++,Azure,Visual C++,Concurrency,Azure Storage,我正在尝试将文件上载到azure存储,我想利用异步功能。但是我很难知道清理工作是否正确 我想删除文件数据,并释放所有流,但显然它应该在上传完成后完成 关于如何改进以使其更加健壮,有何评论 Concurrency::task<void> BlobService::UploadAsync( cloud_blob_container container, const wchar_t* blobName, uint8_t * data, size_t dataLength,

我正在尝试将文件上载到azure存储,我想利用异步功能。但是我很难知道清理工作是否正确

我想删除文件数据,并释放所有流,但显然它应该在上传完成后完成

关于如何改进以使其更加健壮,有何评论

Concurrency::task<void> BlobService::UploadAsync(
    cloud_blob_container container, const wchar_t* blobName,
    uint8_t * data, size_t dataLength,
    const wchar_t* contentType, const wchar_t* cacheControl) {

    rawptr_buffer<uint8_t>* buffer = new rawptr_buffer<uint8_t>(data, dataLength);
    istream inputStream = buffer->create_istream();

    cloud_block_blob blob = container.get_block_blob_reference(utility::string_t(blobName));
    blob.properties().set_content_type(utility::string_t(contentType));
    blob.properties().set_cache_control(utility::string_t(cacheControl));

    azure::storage::blob_request_options options;
    options.set_maximum_execution_time(std::chrono::seconds(10800));
    options.set_server_timeout(std::chrono::seconds(10800));

    azure::storage::access_condition access;
    azure::storage::operation_context context;

    return blob.upload_from_stream_async(inputStream, access, options, context).then([buffer, inputStream, data] {
        buffer->close().wait();
        inputStream.close().wait();

        delete[] data;
        delete buffer;
    });

}
Concurrency::task BlobService::UploadAsync(
cloud\u blob\u container container,const wchar\u t*blobName,
uint8_t*数据,大小_t数据长度,
常量wchar\u t*内容类型,常量wchar\u t*缓存控制){
rawptr_buffer*buffer=新的rawptr_buffer(数据,数据长度);
istream inputStream=buffer->create_istream();
cloud_block_blob blob=container.get_block_blob_引用(实用工具::string_t(blobName));
properties().set_content_type(实用工具::string_t(contentType));
properties().set_cache_control(实用工具::string_t(cacheControl));
azure::storage::blob_请求_选项;
选项。设置最大执行时间(std::chrono::seconds(10800));
选项。设置服务器超时(std::chrono::seconds(10800));
azure::存储::访问\条件访问;
azure::存储::操作上下文;
返回blob.upload\u from\u stream\u async(inputStream,access,options,context){
缓冲区->关闭().wait();
inputStream.close().wait();
删除[]数据;
删除缓冲区;
});
}

您是否有任何迹象表明您提出的解决方案不正确?当我看到手动删除调用时,我有点厌倦了,所以当抛出异常时,它可能无法正确清理,但在meNo看来,它的结构似乎是正确的。我有一个在生产环境中运行的同步版本,服务器不是很稳定,但我不知道它是否相关。。。所以我会检查所有潜在的问题,并努力确保清理工作完成。delete[]数据不会让我太担心,但是关闭和删除stream moreminar主题外的注释:
hours{3}
seconds{10800}
更易读,并且具有相同的功能。