대용량 Zimbra TGZ 백업의 항목 수를 세는 데는 시간이 걸릴 수 있습니다. 데스크톱 앱의 메인 스레드나 웹 요청 내부에서 카운트를 실행하면 다른 모든 작업이 완료될 때까지 대기합니다. Aspose.Email for .NET은 TGZ 카운팅 메서드의 비동기 버전을 추가하여 결과를 await하고, 카운트가 너무 오래 걸릴 경우 중지할 수 있습니다.
이 튜토리얼은 이미 async와 await를 사용하는 .NET 개발자를 위한 것입니다. 콘솔 도구나 스크립트에서 빠른 개수만 필요하다면 일반 버전이 더 간단합니다; 자세한 내용은 Count Messages in TGZ Files with TgzReader.GetItemsCount를 참조하세요.
Zimbra TGZ 백업에서 항목을 비동기적으로 계산하는 방법
두 개의 비동기 메서드가 있습니다: 하나는 아카이브에 있는 전체 항목 수를 반환하고, 다른 하나는 메시지나 연락처와 같은 특정 유형의 항목 수를 반환합니다. 이 메서드들은 일반 메서드와 동일한 숫자를 반환합니다. 차이점은 아카이브를 읽는 동안 코드가 다른 작업을 자유롭게 수행할 수 있다는 점입니다.
두 메서드 모두 선택적 취소 토큰을 허용합니다. 이를 통해 시간 제한을 설정하거나 취소 버튼을 연결하거나 웹 요청이 중단될 때 작업을 중지할 수 있습니다.
Aspose.Email 시작하기
설치 Aspose.Email for .NET 26.9 또는 이후 버전을 NuGet에서:
Install-Package Aspose.Email
Zimbra TGZ 백업도 필요합니다. 예제에서는 xhy.tgz라는 파일을 사용합니다.
Zimbra TGZ 항목을 비동기적으로 세기
다음 프로그램은 항목의 총 수를 가져온 다음, 메시지와 연락처를 계산합니다.
using System;
using System.Threading.Tasks;
using Aspose.Email.Storage.Zimbra;
class Program
{
static async Task Main()
{
var fileName = "xhy.tgz";
using (var reader = new TgzReader(fileName))
{
int totalItems = await reader.GetTotalItemsCountAsync();
int numberOfMessages = await reader.GetItemsCountAsync(ItemType.Message);
int numberOfContacts = await reader.GetItemsCountAsync(ItemType.Contact);
Console.WriteLine($"Total items: {totalItems}");
Console.WriteLine($"Messages: {numberOfMessages}");
Console.WriteLine($"Contacts: {numberOfContacts}");
}
}
}
프로그램은 백업에 있는 총 항목 수를 출력한 다음, 메시지와 연락처 수를 출력합니다.
몇 가지 주의할 점:
Main은async로 표시되어 카운트를 차단하지 않고 기다릴 수 있습니다.- 각 카운트는 다음 카운트가 시작되기 전에 완료됩니다.
using블록은 세 개의 카운트가 모두 완료되면 아카이브 파일을 해제합니다.
시간 초과로 카운트 중지
카운트가 실행될 수 있는 시간을 제한하려면, 시간 제한이 있는 취소 토큰을 생성하고 이를 전달하십시오. 이 예제는 30초 후에 중단됩니다:
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)))
using (var reader = new TgzReader("xhy.tgz"))
{
int numberOfMessages = await reader.GetItemsCountAsync(ItemType.Message, cts.Token);
Console.WriteLine($"Messages: {numberOfMessages}");
}
취소 유형에 대해 using System.Threading;을 추가합니다.
같은 토큰은 다른 상황에서도 작동합니다. 데스크톱 앱에서는 토큰 소스를 필드에 보관하고 사용자가 취소를 클릭하면 취소합니다. ASP.NET Core 앱에서는 클라이언트 연결이 끊길 때 신호를 보내는 토큰을 전달하여, 아무도 응답을 기다리고 있지 않을 경우 카운트가 중지되도록 합니다.
카운트가 취소될 경우, 비동기 코드의 다른 부분에서 취소를 처리하는 방식과 동일하게 처리하십시오. 예를 들어 메시지를 표시하거나 사용자가 다시 시도하도록 허용할 수 있습니다.
다음 단계
카운팅 후, 백업을 비동기적으로 내보낼 수도 있습니다; 내보내기 메서드는 취소 토큰도 허용합니다. Zimbra 작업하기 문서와 TgzReader API 참조 에서는 TGZ 백업으로 할 수 있는 다른 작업들을 다룹니다. 질문이 있으면 Aspose.Email 지원 포럼에서 문의하세요.
자주 묻는 질문
왜 비동기적으로 카운트합니까? 아카이브를 읽는 동안 애플리케이션은 다른 작업을 계속 수행할 수 있습니다. 데스크톱 앱은 반응성을 유지하고, 웹 서버는 대기 중에 스레드를 차단하지 않습니다.
너무 오래 걸리는 카운트를 취소할 수 있나요? 예. 두 비동기 카운트 메서드는 모두 선택적 취소 토큰을 허용합니다.
어떤 항목 유형을 셀 수 있나요? 메시지, 연락처, 캘린더 항목 및 작업.
취소 토큰이 필요합니까? 아니요. 선택 사항입니다. 전달하지 않으면, 카운트가 완료될 때까지 실행됩니다.
리더를 해제해야 하나요? 예.
using블록을 사용하면 작업이 끝났을 때 아카이브 파일이 해제됩니다.
무료 라이선스를 받고 더 알아보세요
Aspose.Email for .NET을 평가 제한 없이 테스트하려면 무료 임시 라이선스를 요청하십시오.
